Python中的ValueError,数组中的索引数不匹配
Posted
技术标签:
【中文标题】Python中的ValueError,数组中的索引数不匹配【英文标题】:ValueError in Python, Number of Indices in Array not Matching 【发布时间】:2021-02-08 12:49:58 【问题描述】:我应该编写一个方法,通过使用“平均方法”将 RGB 图像转换为灰度,其中我取 3 种颜色的平均值(不是加权方法或亮度方法)。然后我必须将原始 RGB 图像和灰度图像彼此相邻显示(连接)。我正在编写的语言是 Python。这就是我的代码目前的样子。
import numpy as np
import cv2
def average_method(img):
grayValue = (img[:,:,2] + img[:,:,1] + img[:,:,0])/3
gray_img = grayValue.astype(np.uint8)
return gray_img
def main():
img1 = cv2.imread('html/images/sunflowers.jpg')
img1 = cv2.resize(img1, (0, 0), None, .25, .25)
img2 = average_method(img1)
numpy_concat = np.concatenate((img1, img2), 1)
cv2.imshow('Numpy Concat', numpy_concat)
cv2.waitKey(0)
cv2.destroyAllWindows
if __name__ =="__main__":
main()
当我尝试运行它时,它显示了这个错误:
Traceback (most recent call last):
File "test.py", line 23, in <module>
main()
File "test.py", line 16, in main
numpy_concat = np.concatenate((img1, img2), 1)
File "<__array_function__ internals>", line 5, in concatenate
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 3 dimension(s) and the array at index 1 has 2 dimension(s)
有人可以帮我解决这个问题,以便我可以使用“平均方法”成功地将 RGB 和灰度并排放置吗?不确定我是否正确设置了平均方法并导致此问题,或者它是否来自我尝试连接图片的方式。谢谢。
【问题讨论】:
专业提示:您的问题是关于索引错误,而不是关于灰色计算。所以你应该把它放在标题中并作为主要问题,否则人们可能会忽略你的问题 您确定这是彩色图像吗?每一步之后的 img1.shape 是什么? cv2.imread 的第二个参数是什么意思? @GiacomoCatenazzi 感谢您指出这一点!我继续编辑它。 @TurePålsson 是的,img1 应该是彩色图像(原始图像),然后 img2 将是它的灰度图像。感谢您提到 cv2.imread 的第二个参数,我把它拿出来是因为它本身会将其转换为灰度,但我只想显示原始的 rgb 参数。 cv2.imread 之后的 img1.shape 是 (183, 275, 3)。 cv2.resize 后的 img1.shape 为 (46, 69, 3)。 @TurePålsson 在 np.concatenate 行之后打印语句不会打印,这意味着该行没有通过,因为“ValueError:所有输入数组必须具有相同的维数,但数组索引 0 处有 3 个维度,索引 1 处的数组有 2 个维度”。我编辑了我的问题,现在更清楚了。 【参考方案1】:错误消息几乎可以告诉您发生了什么。您的 img2 现在是灰度(单通道)图像,而 img1 显然仍然是彩色(三通道)。
我不是 numpy 向导,所以可能有更好的解决方案,但我认为您可以使用将 img2 扩展到三个通道
img2 = np.stack(3 * [img2], axis=2)
编辑:可能更高效(也更难理解):
img2 = np.repeat(A[..., np.newaxis], 3, axis=2)
【讨论】:
以上是关于Python中的ValueError,数组中的索引数不匹配的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:groupby Pandas 中的“无法从重复的轴重新索引”
无法将列表转换为数组:ValueError:只有一个元素张量可以转换为 Python 标量
从变量中的值构造 pandas DataFrame 会给出“ValueError:如果使用所有标量值,则必须传递一个索引”