ZBLOG

cv::Mat 显示在QLabel上

要在 QLabel 上显示 cv::Mat 图像,您需要将 OpenCV 的 cv::Mat 转换为 Qt 的 QImage,然后设置到 QLabel。以下是如何完成这一过程的步骤和示例代码。

步骤

  1. 转换 cv::Mat 为 QImage:使用 OpenCV 和 Qt 提供的函数将 Mat 格式图像转换为 QImage。
  2. 设置 QLabel 的 pixmap:使用 QPixmap 从 QImage 创建一个图像,并将其设置为 QLabel 的内容。

示例代码

#include <QApplication>
#include <QLabel>
#include <opencv2/opencv.hpp>
#include <QPixmap>

QImage MatToQImage(const cv::Mat& mat) {
    // 检查是否是空矩阵
    if (mat.empty()) {
        return QImage();
    }

    // 根据通道数选择合适的转换方式
    switch (mat.type()) {
        case CV_8UC3: { // RGB
            // 将 BGR 转换为 RGB
            cv::Mat rgb;
            cv::cvtColor(mat, rgb, cv::COLOR_BGR2RGB);
            return QImage(rgb.data, rgb.cols, rgb.rows, static_cast<int>(rgb.step), QImage::Format_RGB888);
        }
        case CV_8UC1: { // 灰度图
            return QImage(mat.data, mat.cols, mat.rows, static_cast<int>(mat.step), QImage::Format_Grayscale8);
        }
        default:
            qWarning("Unsupported image format");
            return QImage();
    }
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个 QLabel
    QLabel label;

    // 读取图片(确保路径正确)
    cv::Mat image = cv::imread("path/to/your/image.jpg");

    // 将 cv::Mat 转换为 QImage
    QImage qimg = MatToQImage(image);

    if (!qimg.isNull()) {
        // 创建一个 QPixmap 并设置给 QLabel
        label.setPixmap(QPixmap::fromImage(qimg));
        
        label.resize(qimg.size()); // 设置 QLabel 大小与图片一致
        label.show();               // 显示 QLabel
    } else {
        qWarning("Failed to convert cv::Mat to QImage");
    }

    return app.exec();
}

说明

  1. MatToQImage 函数

    • 检查输入的 cv::Mat 是否为空。
    • 根据不同的通道数(例如 3 通道的 RGB 或单通道的灰度),适当地进行颜色空间转换,然后创建相应格式的 QImage
  2. 主函数

    • 使用 OpenCV 读取一张图片并创建一个 cv::Mat 对象。
    • 调用自定义函数将该 cv::Mat 转换为 QImage
    • 如果转换成功,将生成的图像设置到 QLabel 中并显示。
  3. 记得链接库

    • 在您的项目文件中添加 OpenCV 和 Qt 库的链接,例如在 .pro 文件中:
      
      QT += widgets
      CONFIG += c++11
      LIBS += -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc  # 添加需要使用到的OpenCV模块
      

确保安装了 Qt 和 OpenCV,并正确配置了开发环境。此示例仅提供基础框架,您可以根据需要进行扩展和修改。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21531

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?