Qt显示OpenCV图像:Mat转换为QImage详解
在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组件进行集成。
原文地址: http://www.cveoy.top/t/topic/nI8o 著作权归作者所有。请勿转载和采集!