项目要进行大量的qimage和cvmat互相转换,以及cvmat相关颜色处理
颜色处理以及转换次数多了后就会出现图片变成黑白条状,并且横向会缩小
尝试过网上各种互转的写法,都不得行
网上说的qimage深拷贝或者mat四字节对齐问题,也是没有效果
问题图片(手动打码):
这是有问题的代码:
//qimage转cvmat
cv::Mat MainWindow::QImageTocvMat(const QImage image) {
cv::Mat mat( image.height(), image.width(),CV_8UC4,const_cast<uchar*>(image.bits()), static_cast<size_t>(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<uchar> imgBuf;
imencode(".jpg", temp, imgBuf);
QByteArray ByteImg((char*)imgBuf.data(), static_cast<int>(imgBuf.size()));
QImage image;
image.loadFromData(ByteImg, "JPG");
return image;
}
出现问题的原因目前还是没有搞清楚。
本人算是opencv初学者,有些东西还是在学习当中。
参考代码:
Opencv的mat转换成qimage或者qpixmap_TryRestart的博客-CSDN博客_opencv转qpixmaph