c++ - 将 Qimage 转换为 Mat opencv 时出错

标签 c++ qt opencv

当我将 QImage 转换为 cv::Mat 时,Mat 变得模糊。

这是转换它的代码:

QPixmap pixmap(*ui->imgLabel->pixmap());
QImage image = pixmap.toImage();

image.convertToFormat(QImage::Format_RGB888);

Mat matImage = Mat(image.height(), image.width(), CV_8UC3, image.scanLine(0));

这是缩放后的原始图像:

这是创建的图像:

感谢您的帮助。

最佳答案

我不懂QT,但是你尝试过WEB现成的解决方案吗?例如,来自this link我找到了另一种转换方法:

Mat qimage2mat(const QImage& qimage) {
    cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine());
    cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 );
    int from_to[] = { 0,0,  1,1,  2,2 };
    cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 );
    return mat2;
};

关于c++ - 将 Qimage 转换为 Mat opencv 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11903587/

相关文章:

c++ - 使用数组元素执行计算

c++ - 增加优化标志时二进制文件怎么可能不改变?

qt - 使用 Qt 进行 "Cross-Platform"开发的最佳实践

c++ - 在 Qt 组合框中设置项目

c++ - 正在重写的 fstream 文件

c++ - 在 Qt 中连接多个 .ui 文件

opencv - JavaCV中的人脸检测

opengl-es - OpenCV、OpenGL 和 Android Sensor 之间引用坐标系的变化

c++ - 访问 cv::Mat 数据的 OpenCV 错误

c++ - 计算负实数值的 Gamma 函数(C++、Boost)