我无法在 Qlabel 上显示 opencv 视频。
我是使用 opencv 和 qt 的新手,这周我试图使用 qt 按钮事件进行一个小练习,以显示从 opencv 到我的小部件的 qlabel 的视频捕获。但奇怪的是,当我运行下面附加的代码时,程序说“程序意外完成”。请帮助我,因为对我来说似乎没有任何问题。感谢您的时间和哥斯达黎加的问候。
PS 当我只是尝试在没有任何 gui 的情况下运行 openCv 代码时,我的意思是只使用 buttonClicked 事件和 cvShowImage("Video", frame); 中的代码。要显示视频,程序运行良好,但会删除一个错误和几个这样的警告。
HIGHGUI 错误:V4L/V4L2:VIDIOC_S_CROP
libpng 警告:使用 libpng-1.2.49 构建的应用程序但使用 1.5.12 运行
libpng 警告:使用 libpng-1.2.49 构建的应用程序但使用 1.5.12 运行
libpng 警告:使用 libpng- 构建的应用程序1.2.49 但运行时出现 1.5.12
libpng 警告:使用 libpng-1.2.49 构建的应用程序但运行时出现 1.5.12
libpng 警告:使用 libpng-1.2.49 构建的应用程序但运行时出现 1.5.12
libpng 警告:使用 libpng 构建的应用程序-1.2.49 但运行时出现 1.5.12
libpng 警告:应用程序使用 libpng-1.2.49 构建但运行时出现 1.5.12
libpng 警告:应用程序使用 libpng-1.2.49 构建但运行时使用 1.5.12
libpng 警告:使用 libpng-1.2.49 构建的应用程序但使用 1.5.12 运行
libpng 警告:使用 libpng-1.2.49 构建的应用程序但使用 1.5.12 运行
附代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <cv.h>
#include <highgui.h>
using namespace std;
using namespace cv;
IplImage* imgTracking=0;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
CvCapture *cap; cap = cvCaptureFromCAM(1);
IplImage *frame; frame = cvQueryFrame(cap);
bool play = true;
while(frame && play){
cvWaitKey(10); IplImage *img = cvCloneImage(frame);
if (img->origin) {
cvFlip(img);
img->origin= 0;
}
QImage qimg;
qimg = IplImage2QImage(img);
//cvShowImage("Video", frame);
ui->labVideo->setPixmap(QPixmap::fromImage(qimg));
cvReleaseImage(&img);
frame = cvQueryFrame(cap);
}
cvReleaseCapture(&cap);
}
QImage MainWindow::IplImage2QImage(const IplImage *iplImage)
{
int height = iplImage->height;
int width = iplImage->width;
const uchar *qImageBuffer =(const uchar*)iplImage->imageData;
QImage img(qImageBuffer, width, height, QImage::Format_RGB888);
return img.rgbSwapped();
}