如何在QLabel中显示捕获图像
How to show capture image in QLabel
我正在尝试向Qlabel显示实时摄像机图像。。当我启动代码时,它不会给出任何错误,我的相机指示灯变为蓝色,这意味着可以工作。但是ui并没有启动。调试代码后,我发现在while(true)
中它总是循环,但ui->lblProcessedVideo->setPixmap.....
命令不显示任何ui。
你能告诉我我的错误吗。。
这是我的部分代码:
void MainWindow::getImageFromVideo()
{
CvCapture* capture;
cv::Mat frame;
cv::Mat gray_frame;
capture = cvCaptureFromCAM( 0 );
if( capture )
{
while( true )
{
frame = cvQueryFrame( capture );
if( !frame.empty() )
{
cvtColor( frame, gray_frame, CV_BGR2GRAY);
equalizeHist( gray_frame, gray_frame );
ui->lblProcessedVideo->setPixmap( QPixmap::fromImage( Mat2QImage( frame )));
}
}
}
}
EDIT:Mat2QImage()
是一个将Mat转换为QImage 的函数
正如Ezee所说,您需要将从相机捕获的图像委托给单独的线程,然后将图像发送到GUI线程。这里的样本代码:
//计时器.h
class Timer : public QThread
{
Q_OBJECT
public:
explicit Timer(QObject *parent = 0);
void run();
signals:
void updFrame(QPixmap);
public slots:
};
//timer.cpp
Timer::Timer(QObject *parent) :
QThread(parent)
{
}
void Timer::run() {
VideoCapture cap(0); // open the default camera
for(;;){
Mat frame;
cap.read(frame);
QPixmap pix = QPixmap::fromImage(IMUtils::Mat2QImage(frame));
emit updFrame(pix);
if( waitKey (30) >= 0){
break;
}
}
}
//videoviewer.h
class VideoViewer : public QLabel
{
Q_OBJECT
public:
explicit VideoViewer(QObject *parent = 0);
signals:
public slots:
void updateImage(QPixmap pix);
};
//videoviever.cpp
VideoViewer::VideoViewer(QObject *parent) :
QLabel()
{
Timer* timer = new Timer();
connect(timer,SIGNAL(updFrame(QPixmap)),this,SLOT(updateImage(QPixmap)));
timer->start();
}
void VideoViewer::updateImage(QPixmap pix){
this->setPixmap(pix);
}
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 我在 OpenGL 中显示图像时遇到问题
- C++ 窗口显示无框图像
- 裁剪并显示我从哈尔级联获得的图像
- 如何显示具有 opengl 纹理的灰度图像
- 使用 Splashkit 逐个显示多个C++图像
- 如何使用OpenCV同时显示"深度"和"颜色"视频图像
- 如何从amd gpus的显示输出中获取图像数据
- Qt-png图像未显示在部署应用程序中
- 无法在 Opencv 中显示图像导致内存位置
- 只有左侧图像显示在OpenGL Stereo上
- gstreamer 管道代码,用于通过来自相机的实时流式传输而不是图像显示文本
- wxnotebook动态图像显示
- OpenCV-关闭图像显示窗口
- Qt拖放-改变图像显示,而拖动
- 为什么从Project Tango Tablet中提取的图像显示为灰色
- 如果同时运行两次wkhtmltopdf库,为什么它只会发生数据文档,而没有任何表或图像显示在html文件中
- 如何在win32中刷新图像显示白色,保持文字不变