cv2::imshow 的参数
Posted
技术标签:
【中文标题】cv2::imshow 的参数【英文标题】:Arguments to cv2::imshow 【发布时间】:2012-04-12 09:25:07 【问题描述】:编辑:原标题“将 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
数组。
有什么想法吗?
【问题讨论】:
是的,这已经被回答了——你实际上并没有错过第二个参数,而是第一个。然而,我来到这里还有一个问题:不是每个uint8
类型的numpy.ndarray
都可以显示。我做了一个切片,以获取图像的单个通道,例如red = frame[:,:,0]
,然后在imshow
中出现异常。我怀疑这是因为稀疏。 red = frame[:,:,0].copy()
已修复。
【参考方案1】:
该函数具有以下文档字符串:imshow(winname, mat) -> None
。
您可以通过在解释器中输入cv2.imshow.__doc__
来查看文档字符串。
试试cv2.imshow('Image', cvimage)
。
tl;dr :在原始问题中,缺少“窗口名称”的第一个参数。 "imshow" 有两个参数,但只提供了一个。
【讨论】:
当我执行cvimage = cv2.imread('image.png')
后跟cv2.imshow('Image', cvimage)
时,不会返回错误并显示图像。
不导入numpy,返回的类型是numpy.ndarray
。
你缺少一个必需的参数
正如 Neon22 所说,您缺少 imshow 函数的第一个参数,它是显示图像的窗口的名称。imshow 适用于表示为 numpy 数组的图像。【参考方案2】:
从技术上讲,该问题询问如何将 NumPy 数组(类似于 CV2 数组)转换为 Mat 对象 (CV)。有兴趣的朋友可以通过以下方式完成:
mat_array = cv.fromarray(numpy_array)
其中 mat_array 是一个 Mat 对象,而 numpy_array 是一个 NumPy 数组或图像。 我建议尽可能远离旧的简历结构。 Numpy 数组提供比原生 Python 中的实现更好的性能
【讨论】:
这是为 cv 而不是 cv2 我们应该如何在 C++ 和 cv2 中做到这一点?【参考方案3】:需要Mat
对象,因为 C/C++ 缺乏矩阵的标准/本机实现。
但是,numpy
的 array
是该功能的完美替代品。因此,cv2
模块接受 numpy.array
s 文档中指示矩阵的任何位置。
【讨论】:
以上是关于cv2::imshow 的参数的主要内容,如果未能解决你的问题,请参考以下文章
机器学习进阶-图像基本操作-图像数据读取 1.cv2.imread(图片读入) 2.cv2.imshow(图片展示) 3.cv2.waitKey(图片停留的时间) 4.cv2.destroyAllW