//对不起我的英语不好.
请告诉我,我做错了什么?我已经阅读了很多关于此的内容.并写一些代码,但我有一个可怕的结果.
据我所知,Opencv CV_8UC3与QImage :: 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)