cv2 :: imshow的参数

时间:2012-03-28 18:17:48

标签: python opencv numpy matplotlib

编辑:原始标题“将numpy数组转换为cvmat”是一个错误 - OpenCV不是很有用的错误消息而我没有阅读文档!

使用OpenCV 2,IPython现在默认使用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: 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数组的函数。

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

该函数具有以下文档字符串:imshow(winname, mat) -> None。 您可以通过在解释器中键入cv2.imshow.__doc__来查看文档字符串。

尝试cv2.imshow('Image', cvimage)

tl; dr:在原始问题中,“窗口名称”的第一个参数丢失了。 “imshow”有两个参数,只提供了一个。

答案 1 :(得分:15)

这个问题在技术上询问如何将NumPy数组(类似于CV2数组)转换为Mat对象(CV)。对于任何有兴趣的人,可以通过以下方式完成:

mat_array = cv.fromarray(numpy_array)

其中mat_array是Mat对象,numpy_array是NumPy数组或图像。 我建议尽可能远离旧的CV结构。 Numpy数组比原生Python中的实现提供了更好的性能

答案 2 :(得分:3)

需要

Mat对象,因为C / C ++缺少矩阵的标准/本机实现。

但是,numpy的{​​{1}}是该功能的完美替代品。因此,array模块在​​文档中指示矩阵的任何地方都接受cv2