使用 OpenCV imwrite 方法处理来自 OpenMV 相机的图像的问题

问题描述

我正在尝试使用 OpenCV 的拼接算法拼接从我的 OpenMV H7 相机拍摄的一些图像。我遇到了无法写入或读取这些图像的问题,这让我认为存在一些兼容性问题。

更准确地说,我在使用方法 (cv2.imwrite) 本身时遇到了这个错误

  File "main_script_test.py",line 141,in <module>
    cv2.imwrite("/Documents/Cam/Images/image_" + str(images_To_Be_Taken),img)
TypeError: Expected Ptr<cv::UMat> for argument 'img'

我一直在想,也许有一种方法可以将图像转换为 NumPy 数组以使其兼容,但我不太确定。

有什么建议吗?

解决方法

OpenCV's imwrite 需要一个 Mat 对象,它是一个“n 维密集数组类”。传递图像数据的 numpy 数组代替 Mat 对象,至少在 imwrite() 的情况下,将产生正确的结果。

来自上面链接的文档:

因此,Mat 中的数据布局兼容大多数密集 来自标准工具包和 SDK 的数组类型,例如 Numpy (ndarray)、Win32(独立设备位图)等,即 使用任何使用步骤(或步幅)来计算位置的数组 一个像素。由于这种兼容性,可以制作 Mat 用户分配数据的标头并使用 OpenCV 就地处理它 功能。

对于您的代码:

cv2.imwrite("/Documents/Cam/Images/image_" + str(images_To_Be_Taken),np.asarray(img))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...