在Qt中显示OpenCV的Mat图像,需要将Mat转换为QImage或者QPixmap,然后使用QLabel或者QGraphicsView等组件进行显示。

以下是一种常用的方法,使用QImage将Mat转换为Qt的图像格式:

// 将OpenCV的Mat转换为QImage
QImage Mat2QImage(const cv::Mat& mat)
{
    // 根据Mat的通道数确定Qt的图像格式
    int channel = mat.channels();
    if (channel == 1)
    {
        return QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_Grayscale8);
    }
    else if (channel == 3)
    {
        cv::Mat rgbMat;
        cv::cvtColor(mat, rgbMat, cv::COLOR_BGR2RGB);
        return QImage(rgbMat.data, rgbMat.cols, rgbMat.rows, rgbMat.step, QImage::Format_RGB888);
    }
    else if (channel == 4)
    {
        cv::Mat rgbaMat;
        cv::cvtColor(mat, rgbaMat, cv::COLOR_BGRA2RGBA);
        return QImage(rgbaMat.data, rgbaMat.cols, rgbaMat.rows, rgbaMat.step, QImage::Format_RGBA8888);
    }
    else
    {
        return QImage();
    }
}

// 在Qt组件中显示OpenCV的Mat图像
cv::Mat mat = cv::imread('image.png');
QImage qimg = Mat2QImage(mat);
QLabel* label = new QLabel();
label->setPixmap(QPixmap::fromImage(qimg));
label->show();

另外,如果需要在Qt中进行图像处理,建议使用Qt的图像处理模块,而不是直接使用OpenCV。因为Qt提供了丰富的图像处理函数和组件,可以更好地与Qt的UI组件进行集成。

Qt显示OpenCV图像:Mat转换为QImage详解

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

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