c++ - cv::Mat 到 QImage 的转换无法正常工作

标签 c++ qt opencv qt4 qimage

我正在使用 opencv我必须将它整合到 Qt Gui,但我在 Qt 中显示图像时遇到了一些问题...

这是我正在使用的代码

#include <QApplication>
#include <QtGui>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

QImage const Mat2QImage(const cv::Mat& src){
  return QImage((unsigned char*)src.data, src.cols, src.rows, src.step, QImage::Format_RGB888);
}

int main(int argc, char **argv){

  QApplication app(argc, argv);
  cv::Mat src = cv::imread("lena.jpg");

  QLabel aLabel;
  QImage img = Mat2QImage(src);
  aLabel.resize(src.rows, src.cols);
  aLabel.setPixmap(QPixmap::fromImage(img));
  aLabel.show();

  return app.exec();

} 

结果如下: enter image description here

请注意,如果我将格式更改为 QImage::FormatRGB32我会得到一个空窗口,我也尝试了所有格式,但这不是我想要的...... 关于如何解决问题的任何想法?

谢谢!

最佳答案

OpenCV 将图像保存为 bgr 格式。这意味着像素的颜色值被交换。 如果将此行添加到您的程序中,图像将正确显示:

  img = img.rgbSwapped();

关于c++ - cv::Mat 到 QImage 的转换无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17720298/

相关文章:

c++ - CGAL 维诺图度量

c++ - 如何用某种颜色填充 QGraphicsRectItem?

c++ - 在知 Prop 体的子类类型时使用 C 风格的向下转换

opencv - YUV2 数据的 channel 和位值

android - CUDA 与 opencv for Android

c++ - 为 beaglebone black 交叉编译 c++ openCV 应用程序时出现问题

c++ - OpenGL:新窗口显示当前打开窗口的内容

c++ - MD5暴力破解——高效的多线程实现

c++ - OpenCV无法编译

c++ - 无法在 QGLWidget 中设置所需的 OpenGL 版本