bubbbbbai 2023-01-31 14:47 采纳率: 0%
浏览 43
已结题

qimage互转cvmat出错

软件要进行大量的qimage和cvmat互相转换,以及cvmat相关颜色处理
颜色处理以及转换次数多了后就会出现图片变成黑白条状,并且横向会缩小

img

这是用到的转换代码

//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();  

}

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

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

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-01-31 15:21
    关注

    调整以下代码以改善问题:

    QImage MainWindow::cvMatToQImage(const cv::Mat mat) {
    // 为避免图像内容被更改,请使用clone
    cv::Mat temp = mat.clone();
    // 试图创建QImage时,设置格式为Format_RGB888
    QImage image(temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
    // 将QImage转换为与OpenCV格式相对应的格式
    return image.rgbSwapped();
    }
    
    cv::Mat MainWindow::QImageTocvMat(const QImage image) {
    // 将QImage转换为Mat格式
    cv::Mat mat(image.height(), image.width(), CV_8UC4, const_cast<uchar*>(image.bits()), static_cast<size_t>(image.bytesPerLine()));
    // 转换颜色空间为BGR
    cv::Mat matNoAlpha;
    cv::cvtColor(mat, matNoAlpha, cv::COLOR_BGRA2BGR);
    return matNoAlpha;
    }
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月31日
  • 修改了问题 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?