相关疑难解决方法(0)

cv :: Mat到QImage并返回

//对不起我的英语不好.

请告诉我,我做错了什么?我已经阅读了很多关于此的内容.并写一些代码,但我有一个可怕的结果.

据我所知,Opencv CV_8UC3QImage :: Format_RGB888相同,但BRG和RGB除外.

以这种格式阅读cv :: Mat我能做到:

cv::Mat mat1 = cv::imread("bugero.jpg",3); 
Run Code Online (Sandbox Code Playgroud)

所以,要将cv :: Mat转换为QImage,我可以这样做:

QImage Mat2QImage(cv::Mat const& src)
{
     cv::Mat temp(src.cols,src.rows,src.type());
     cvtColor(src, temp,CV_BGR2RGB);
     QImage dest= QImage((uchar*) temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
     return dest;
}
Run Code Online (Sandbox Code Playgroud)

我做了临时垫因为我想在QImage中拥有数据副本.

然后.要将其转换回来,我必须这样做:

cv::Mat QImage2Mat(QImage const& src)
{
     QImage temp = src.copy();
     cv::Mat res(temp.height(),temp.width(),CV_8UC3,(uchar*)temp.bits(),temp.bytesPerLine());
     cvtColor(res, res,CV_BGR2RGB); 
     return res;
}
Run Code Online (Sandbox Code Playgroud)

我插入了cvtColor(res,res,CV_BGR2RGB) ; 使用BGR颜色制作cv Mat.我不知道这个函数里面有什么cvtColor(res,res,CV_BGR2RGB) ;但是我决定如果cvtColor(res,res,CV_BGR2RGB); 改变地方R和B,这将使这些颜色的地方变回,因为我没有找到CV_BGR2RGB.

所以,我写了一个简短的示例程序

#include <QApplication>
#include <QtGui>
#include <cv.h>
#include "opencv2/highgui/highgui.hpp"

QImage Mat2QImage(cv::Mat …
Run Code Online (Sandbox Code Playgroud)

c++ qt opencv qimage mat

16
推荐指数
1
解决办法
3万
查看次数

标签 统计

c++ ×1

mat ×1

opencv ×1

qimage ×1

qt ×1