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

项目要进行大量的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

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值