gpt4 book ai didi

multithreading - Qt + OpenCV - 在 QLabel 上显示图像

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:56 24 4
gpt4 key购买 nike

我正在尝试从相机捕获实时 View ,并将其重定向以显示在 QLabel 上。但只有一半的观点出现(见下文): Screenshot

左侧窗口使用 cv::imshow() 显示,效果很好。我在另一个线程中捕获 Mat,然后以 Qimage 作为参数发出信号,然后将图像设置到槽中的 QLabel。

代码如下:

while(true){
cam >> mat;
cv::imshow("name",mat);
emit send_UIupdate(mat2qimage(mat));
}

并在插槽中将图像设置为 Qlabel:

void Dialog::updateUI(const QImage &img){
label->setPixmap(QPixmap::fromImage(img));
}

使用下面的方法将 Mat 转换为 QImage:

QImage camera::mat2qimage(const cv::Mat& mat) {
cv::Mat rgb;
cv::cvtColor(mat, rgb, CV_BGR2RGB);
return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
}

有什么解决这个问题的建议吗??

最佳答案

你可以试试这个:

QImage MainWindow::putImage(const Mat& mat)
{
// 8-bits unsigned, NO. OF CHANNELS=1
if(mat.type()==CV_8UC1)
{
// Set the color table (used to translate colour indexes to qRgb values)
QVector<QRgb> colorTable;
for (int i=0; i<256; i++)
colorTable.push_back(qRgb(i,i,i));
// Copy input Mat
const uchar *qImageBuffer = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_Indexed8);
img.setColorTable(colorTable);
return img;
}
// 8-bits unsigned, NO. OF CHANNELS=3
if(mat.type()==CV_8UC3)
{
// Copy input Mat
const uchar *qImageBuffer = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
return img.rgbSwapped();
}
else
{
qDebug() << "ERROR: Mat could not be converted to QImage.";
return QImage();
}
}

我用 QTimer 调用它。我从那里得到它:http://code.google.com/p/qt-opencv-multithreaded/

希望这对您有所帮助。

关于multithreading - Qt + OpenCV - 在 QLabel 上显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com