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++ 缺乏矩阵的标准/本机实现。

但是,numpyarray 是该功能的完美替代品。因此,cv2 模块接受 numpy.arrays 文档中指示矩阵的任何位置。

【讨论】:

以上是关于cv2::imshow 的参数的主要内容,如果未能解决你的问题,请参考以下文章

机器学习进阶-图像基本操作-图像数据读取 1.cv2.imread(图片读入) 2.cv2.imshow(图片展示) 3.cv2.waitKey(图片停留的时间) 4.cv2.destroyAllW

cv2.imshow() 在 Mac 上崩溃

cv2.imshow() 函数抛出断言错误

OpenCV 函数学习03-图像的显示(cv2.imshow)

plt.show 和 cv2.imshow 的区别?

cv2 imshow 有时会显示黑色图像