如何在 Python 中使用 OpenCV 创建 Mat 矩阵?

Posted

技术标签:

【中文标题】如何在 Python 中使用 OpenCV 创建 Mat 矩阵?【英文标题】:How do I create a Mat matrix using OpenCV in Python? 【发布时间】:2021-03-29 04:22:03 【问题描述】:

显然这条线是错误的。

matOut = cv2::Mat::Mat(height, width, cv2.CV_8UC4)

这个也是。

Mat matOut(height, width, cv2.CV_8UC4)

如何创建具有给定大小、形状和格式的现代 openCV 空矩阵?最新的 openCV docs on topic 似乎没有帮助......我直接从该文档中收集了上面使用的格式。注意:我假设 OpenCV (import cv2) Python3、import numpy 等...

我正在寻找创建一个空矩阵,目的是将内容从不同的缓冲区复制到其中...

编辑,更多失败尝试...

matOut = cv2.numpy.Mat(height, width, cv2.CV_8UC4)

matOut = numpy.array(height, width, cv2.CV_8UC4)

【问题讨论】:

这篇文章能回答你的问题吗? ***.com/questions/37182774/… 绝对不是……我花了 30 分钟在那里剖析代码等……是的,我投了反对票。完全浪费时间..看起来它应该可以工作,但显然自发布该答案以来图书馆发生了巨大变化。以目前的形式,它的价值不大。 OpenCV 的 Python 实现使用 numpy 数组作为主要数据类型(和矩阵) - 你在问什么? matOut = cv2.numpy.Mat(height, width, cv2.CV_8UC4) 让我通过智能感知,但是当我运行时,我得到 Exception has occurred: AttributeError module cv2 has no attribute numpy. 你在导入 numpy 吗? 【参考方案1】:

因此,user696969 针对所提出的问题提出了一个非常成功的解决方案。您可以通过以下方式创建一个新的形状区域:

matOut = numpy.zeros([height, width, 4], dtype=numpy.uint8)

注意,我已将所需的内容 cv2.CV_8UC4 替换为预期的响应,即数字 4。一个简单的 RGBA 像素描述符中有 4 个八位字节。如果 OpenCV 工具将该响应作为函数调用执行,我会更喜欢,但这似乎不起作用......

我确实想分享我的用例。我最初打算创建一个空形状的矩阵,以便可以从那里的一维数组中传输数据。当我解决这个问题时,我意识到有更好的方法。我开始例程,其中我收到了一个包含 8 位 RGBA 数据的文件,没有任何前缀元数据。想想没有任何标题信息的原始 BMP。

matContent = numpy.frombuffer(fileContent, numpy.uint8) 
matContentReshaped = matContent.reshape(height, width, 4)
cv2.imshow("Display Window", matContentReshaped)
k = cv2.waitKey(0)

就是这样。 Easy, Peasy....感谢 user696969 和 eldesgraciado 在这里提供的帮助。

【讨论】:

以上是关于如何在 Python 中使用 OpenCV 创建 Mat 矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python opencv中简单地裁剪边界框[重复]

如何从 PIL 图像创建 OpenCV 图像?

在 python 中使用 OpenCV 2.4.0 创建视频

如何使用 OpenCV Python 和 GStreamer 后端创建 x264 RTSP 服务器

使用Python+OpenCV+Keras创建自己的图像分类模型

Opencv Python开放dng格式