我在互联网上搜索过,但找不到将QImage
(或QPixmap
)转换为OpenCV Mat
的方法。我该怎么做呢?
任何帮助都是非常感谢的。
发布于 2012-08-09 23:37:50
如果QImage仍然存在,您只需对其执行一个快速操作,则可以使用QImage内存构建一个cv::Mat::Mat:
cv::Mat mat(image.height(), image.width(), CV_8UC3, (cv::Scalar*)image.scanLine(0));
这假设QImage是3-通道,即RGB888。
如果QImage正在消失,那么您需要复制数据,请参见Qimage to cv::Mat convertion strange behaviour。
如果QImage是Format_ARGB32_Premultiplied (首选格式),那么您需要将每个像素转换为OpenCV的BGR布局。在最新版本中,cv::cvtcolor()函数可以将ARGB转换为RGB。
或者,您可以在复制数据之前使用QImage::convertToFormat()转换为RGB。
发布于 2014-04-24 15:03:05
在你提出这个问题一年后,互联网上已经有了很好的答案:
但在我看来,如果你同时使用Qt和OpenCV,那么输入QImage
可能是,只是为了显示,在这种情况下,你可能会想要使用QPixmap
,因为它针对显示进行了优化。这就是我要做的:
cv::Mat
,如果您想显示图像,请使用第二篇文章中介绍的非复制方法转换为QPixmap
。Mat2QPixmap()
的东西来获取实时result.QPixmap
转换为cv::Mat
,考虑到每种类型的用途,这样做是没有意义的。<代码>H226<代码>G227发布于 2019-02-15 10:56:22
这个问题的答案是Qt 5.11 (可能还有一些更早的版本):
cv::Mat mat(image.height(), image.width(),CV_8UC3, image.bits());
// image.scanline() does not exist,
//and height/width is interchanged for a matrix
同样,假设QImage为RGB888 (即QImage::Format_RGB888)
https://stackoverflow.com/questions/11886123
复制相似问题