如何将 RGB32 格式的 QImage 转换为 OpenCV::mat?

Posted

技术标签:

【中文标题】如何将 RGB32 格式的 QImage 转换为 OpenCV::mat?【英文标题】:How can I convert a QImage of format RGB32 to OpenCV::mat? 【发布时间】:2013-07-23 13:10:26 【问题描述】:

我有一个 RGB32 格式的 QImage 当我这样做时:

cv::Mat depthMat(depthImg.height(),depthImg.width(),CV_8UC3,(uchar*)depthImg.bits(),depthImg.bytesPerLine());

我得到了左边的图像。我实际上应该得到右边的图像。

【问题讨论】:

你不能将 QImage 从 RGB32 转换为 RGB888 吗?这段代码应该适用于格式之王......或尝试使用 CV_32SC3 而不是 CV_8UC3(不确定......) 不!从 RGB32 转换为 RGB888 会改变颜色! @Poko 而且,使用 CV_32SC3 也不起作用! 好的。对不起。很高兴你解决了它。 【参考方案1】:

好的!我想到了! RGB32 有 8 位 R、8 位 G、8 位 B 和 8 位 Alpha。它本质上是RGBA。所以,我们可以这样使用:

cv::Mat depthMat(depthImg.height(),depthImg.width(),CV_8UC4,(uchar*)depthImg.bits(),depthImg.bytesPerLine());

【讨论】:

以上是关于如何将 RGB32 格式的 QImage 转换为 OpenCV::mat?的主要内容,如果未能解决你的问题,请参考以下文章

将 AVFrame 转换为 RGB32 时在 sws_scale 处崩溃

Qt如何将文字变成图片?

使用 QImage 和 OpenCV 显示图像 [重复]

Qt5 将 QImage 转换为 OpenGL 格式

将 QImage 保存到 QBuffer

如何将“背景颜色”转换为 rgb() 格式?