cv::Mat转换为QImage不正常工作

3

我正在使用opencv,需要将其集成到Qt界面中,但在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();

} 

这是结果:

这里是结果: 在此输入图像描述

请注意,如果我将格式更改为QImage :: FormatRGB32,我将得到一个空窗口,我已经尝试了所有格式,但这不是我期望的... 有什么解决问题的想法吗?

谢谢!


1
嗯,OpenCV使用BGR格式,QT使用RGB格式,我认为https://dev59.com/f2445IYBdhLWcg3wH2vH将会对您有所帮助(在Mat2QImage调用之前特别是调用`cvtColor(src, dst, CV_BGR2RGB)`)。 - Najzero
1个回答

2

OpenCV 将图像以 BGR 格式保存。这意味着像素的颜色值被交换了。 如果您将以下代码添加到程序中,图像将被正确显示:

  img = img.rgbSwapped();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接