将图像包含在标签中

时间:2013-05-31 16:33:12

标签: c++ visual-studio-2010 qt opencv

我的标签定义如下:

QLabel* label_min;
label_min = new QLabel(this);
label_min->setGeometry(QRect(10, 20, 640, 480));

我还有一个cv :: Mat图像:

cv::Mat Mat_dst;

我没有找到将图片包含在上面标签中的方法。

有办法吗?

1 个答案:

答案 0 :(得分:1)

我认为你应该首先将cv :: Mat转换为QImage(这看起来并不简单),然后将该QImage转换为QPixmap并使用setPixmap函数。

正如我所说,将cv :: Mat图像转换为QImage并非易事。它取决于你的图像类型(RGB或单色或......)以及cv :: Mat对象的生命周期,如果将cv :: Mat图像的深层副本复制到QImage对你来说是很昂贵的。

cv::Mat cvImg; // your opencv image
QImage img = OpenCV2Qt(cvImg); // Implementation of this function depends on cvImage
label->setPixmap(QPixmap::fromImage(img));

为了将cv :: Mat转换为QImage对象,由于没有提供有关图像类型的更多信息,我相信最好在stackoverflow上看到以下帖子:

how to convert an opencv cv::Mat to qimage

cv::Mat to QImage conversion

最后要记住的是,如果您使用的是RGB图像,OpenCV会以BGR顺序存储数据,但Qt按RGB顺序存储;所以你要么必须调用cvtColor(mat,rgb,CV_BGR2RGB)或qimg.rgbSwapped()。