【问题标题】:Convert Mat to QPixmap将 Mat 转换为 QPixmap
【发布时间】:2013-05-01 12:10:48
【问题描述】:

如何在不加载文件名的情况下直接将 cv::Mat 转换为 QPixmap?

我对此进行了一些研究,但没有任何提示!

作为第一步,我尝试的是保存图像,然后加载它。但这不是我想要的。

【问题讨论】:

  • 您可以使用函数QPixmap::loadFromData(...) 将字段cv::Mat::data 直接加载到QPixmap 中。不过我从来没有尝试过这样做。
  • 顺便说一句,possible duplicate,因为在 Qimage 和 QPixmap 之间切换很容易。
  • 以及如何在QImage和QPixmap之间切换?
  • 再简单不过了:QPixmap::fromImage().

标签: c++ visual-studio-2010 qt opencv qpixmap


【解决方案1】:

Jehan 是对的。

对于将来引用此线程的人: 首先将图像从 BGR(OpenCV 使用)转换为 RGB。

然后:

QPixmap::fromImage(QImage((unsigned char*) mat.data, mat.cols, mat.rows, QImage::Format_RGB888));

【讨论】:

  • 你也可以使用 QPixmap::fromImage(QImage((unsigned char*) mat.data, mat.cols, mat.rows, QImage::Format_RGB888).rgbswapped());所以你不必在开始之前转换图像
  • 这不适用于 Mat3b。究竟可能是什么原因?
  • QPixmap pix= QPixmap::fromImage(QImage((unsigned char*) img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped()); ui->mylable->setPixmap(pix);
  • Qt 5.14之后有一个新的QImage格式QImage::Format_BGR888所以更好的方法是指定格式为QImage::Format_BGR888,现在不需要转换颜色了。
【解决方案2】:

Mehfoos Yacoob 是对的,这是将cv::Mat 转换为QPixmap 的最佳方式。首先,您需要将cv::Mat 转换为QImage,然后使用fromImage 函数,将其结果分配给QPixmap。为了使用正确的QImage 格式,记住cv::Mat 的类型很重要。

这是一个如何做的小例子:http://asmaloney.com/2013/11/code/converting-between-cvmat-and-qimage-or-qpixmap/

【讨论】:

  • 作为此解决方案的附加信息(如stackoverflow.com/a/12312326/2590275 所述)是“没有它,某些图像将无法正确显示”。 -> 添加 mat.step 作为第四个参数。上面链接到asmaloney 的示例还包括他调用的那个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 2014-11-15
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多