Python cv2::imshow的参数
编辑:原始标题“将numpy数组转换为cvmat”是一个错误-OpenCV的错误消息不太有用,我没有阅读文档强> 对于2,现在默认情况下使用NumPy数组Python cv2::imshow的参数,python,opencv,numpy,matplotlib,Python,Opencv,Numpy,Matplotlib,编辑:原始标题“将numpy数组转换为cvmat”是一个错误-OpenCV的错误消息不太有用,我没有阅读文档 对于2,现在默认情况下使用NumPy数组 cvimage = cv2.imread("image.png") #using OpenCV 2 type(cvimage) Out: numpy.ndarray #dtype is uint8 pltimage = plt.imread("image.png") #using Matplotlib type(pltimage) Out:
cvimage = cv2.imread("image.png") #using OpenCV 2
type(cvimage)
Out: numpy.ndarray #dtype is uint8
pltimage = plt.imread("image.png") #using Matplotlib
type(pltimage)
Out: numpy.ndarray #dtype is float
plt.imshow(cvimage) # works great
cv2.imshow(cvimage)
TypeError: Required argument 'mat' (pos 2) not found
由于默认情况下cv2
使用NumPy数组,因此不再存在任何cv::Mat构造函数,并且NumPy没有转换为cv::Mat
数组的函数
有什么想法吗?该函数有以下文档字符串:
imshow(winname,mat)->None
。
您可以通过在解释器中键入cv2.imshow.\uuu doc\uuu
来查看文档字符串
尝试cv2.imshow('Image',cvimage)
tl;dr:在原来的问题中,“窗口名”的第一个参数丢失了。“imshow”接受两个参数,只提供了一个参数。
Mat
对象是必需的,因为C/C++缺少矩阵的标准/本机实现
然而,
numpy
的array
是该功能的完美替代品。因此,cv2
模块在文档中指示矩阵的任何位置都接受numpy.array
s。技术上的问题是如何将numpy数组(类似于cv2数组)转换为Mat对象(CV)。对于任何感兴趣的人,可以通过以下方式完成:
mat_array = cv.fromarray(numpy_array)
其中mat_数组是mat对象,numpy_数组是numpy数组或图像。
我建议尽可能远离旧的简历结构。Numpy数组提供了比本机Python实现更好的性能当我执行
cvimage=cv2.imread('image.png')
后接cv2.imshow('image',cvimage)
时,不会返回错误并显示图像。无需导入Numpy,返回的类型是numpy.ndarray
。您缺少一个必需的参数,正如Neon22所说,您缺少imshow函数的第一个参数,该参数是显示图像的窗口的名称。imshow可以很好地处理以numpy数组表示的图像。是的,这一点已经得到了回答-您实际上并没有遗漏第二个参数,而是遗漏了第一个参数。然而,我来到这里还有一个问题:并非所有numpy.ndarray
类型的uint8
都可以显示。我制作了一个切片,以获得图像的单个通道,如red=frame[:,:,0]
,然后在imshow
中得到了一个异常。我怀疑这是因为稀疏<代码>红色=框架[:,,0 ] .Copy[] /Cuff>固定。这是针对CV而不是CV2,我们应该如何在C++和CV2中这样做?