0

我正在尝试使用 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 数组以使其兼容,但我不太确定。

有什么建议么?

4

1 回答 1

0

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

从上面链接的文档中:

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

对于您的代码:

cv2.imwrite("/Documents/Cam/Images/image_" + str(images_To_Be_Taken), np.asarray(img))
于 2021-01-14T04:02:29.110 回答