要将QImage转换为cv::Mat格式的图像,并在label上显示,可以按照以下步骤进行操作:

  1. 首先,需要包含OpenCV库的头文件:
#include <opencv2/opencv.hpp>
  1. 在VideoProcessor类的processFrame()槽函数中,将QImage转换为cv::Mat格式的图像:
void VideoProcessor::processFrame(int requestId, const QImage& img)
{
    cv::Mat srcImage = QImageToCvMat(img);
    cv::Mat dstImage;

    // 进行图像处理操作,将结果保存在dstImage中

    showOnLabel(dstImage); // 在label上显示图像
}
  1. 实现一个辅助函数QImageToCvMat(),用于将QImage转换为cv::Mat格式的图像:
cv::Mat QImageToCvMat(const QImage& image)
{
    cv::Mat mat;
    switch (image.format())
    {
        case QImage::Format_RGB888:
            mat = cv::Mat(image.height(), image.width(), CV_8UC3, const_cast<uchar*>(image.bits()), image.bytesPerLine());
            cv::cvtColor(mat, mat, cv::COLOR_RGB2BGR); // 如果需要将RGB格式转换为BGR格式
            break;

        case QImage::Format_Grayscale8:
            mat = cv::Mat(image.height(), image.width(), CV_8UC1, const_cast<uchar*>(image.bits()), image.bytesPerLine());
            break;

        // 其他QImage格式的处理方式

        default:
            qWarning() << "Unsupported image format";
            break;
    }

    return mat;
}
  1. 实现一个showOnLabel()函数,用于在label上显示图像:
void VideoProcessor::showOnLabel(const cv::Mat& image)
{
    cv::cvtColor(image, image, cv::COLOR_BGR2RGB); // 将BGR格式转换为RGB格式

    QImage qImage(image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);
    QPixmap pixmap = QPixmap::fromImage(qImage);

    // 在label上显示图像
    // 假设label对象的名称为labelImage
    labelImage->setPixmap(pixmap.scaled(labelImage->size(), Qt::KeepAspectRatio));
}

然后,你可以在主函数中继续使用VideoProcessor类,并在lambda函数中调用showOnLabel()函数来显示图像。

注意:在使用OpenCV库之前,请确保已正确配置和安装了OpenCV库,并在项目文件中添加了正确的include路径和链接库

#include video_processorhVideoProcessorVideoProcessorQObject parent QObjectparent m_camera = new QCamerathis; m_imageCapture = new QCameraImageCapturem_c

原文地址: https://www.cveoy.top/t/topic/h6Re 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录