QImage和cv::Mat互转图片出错问题解决

项目要进行大量的qimage和cvmat互相转换,以及cvmat相关颜色处理

颜色处理以及转换次数多了后就会出现图片变成黑白条状,并且横向会缩小

尝试过网上各种互转的写法,都不得行

网上说的qimage深拷贝或者mat四字节对齐问题,也是没有效果

问题图片(手动打码):

QImage和cv::Mat互转图片出错问题解决_第1张图片

这是有问题的代码:

 
//qimage转cvmat
cv::Mat MainWindow::QImageTocvMat(const QImage image) {
 
    cv::Mat  mat( image.height(), image.width(),CV_8UC4,const_cast(image.bits()),  static_cast(image.bytesPerLine())
        cv::Mat  matNoAlpha;
        cvtColor(mat, matNoAlpha, cv::COLOR_BGRA2BGR); 
        return matNoAlpha;
    
}
 
//cvmat转qimage
QImage MainWindow::cvMatToQImage(const cv::Mat mat) {
 
    cv::Mat temp = mat.clone();
    QImage image(temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
    QImage image2 = image.rgbSwapped();
    return image2.copy();  
 
}

ps:正常来说这个转换代码是没有问题的,但是我这个项目有大量的图片处理操作,没问题也整成了有问题。

解决方式:

QImage MainWindow::cvMatToQImage(const cv::Mat mat)
 {
	cv::Mat temp = mat.clone();
	vector imgBuf;
    imencode(".jpg", temp, imgBuf);
 
    QByteArray ByteImg((char*)imgBuf.data(), static_cast(imgBuf.size()));
    QImage image;
    image.loadFromData(ByteImg, "JPG");
    return image;
}

出现问题的原因目前还是没有搞清楚。

本人算是opencv初学者,有些东西还是在学习当中。

参考代码:

Opencv的mat转换成qimage或者qpixmap_TryRestart的博客-CSDN博客_opencv转qpixmaph

你可能感兴趣的:(qt,opencv,c++,图像处理)