1.使用OpenCV進行打開攝像頭並進行錄像
- CvCapture *capture;
- IplImage *frame;
- QImage *qImg;
- QTimer *timer;
- capture = cvCaptureFromCAM(0);
- cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,320);
- cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,240);
- if(capture)
- {
- QMessageBox::information(this,"Information","successful!");
- if (capture)
- {
- frame = cvQueryFrame(capture);
- if (frame)
- this->resize(frame->width,frame->height);
- qImg = new QImage(QSize(frame->width,frame->height),QImage::Format_RGB888);
- iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),8,3);
- iplImg->imageData = (char*)qImg->bits();
- timer = new QTimer(this);
- timer->setInterval(30);
- connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));
- timer->start();
- writer = cvCreateVideoWriter("out.avi",CV_FOURCC('D', 'I', 'V', 'X'),10,
- cvSize(frame->width,frame->height),1);
- isCamera = true;
- }
- }
- else
- {
- QMessageBox::information(this,"Information","Sorry,fail!");
- isCamera = false;
- }
- void openCV::paintEvent(QPaintEvent *e)
- {
- QPainter painter(this);
- if(isCamera == true)
- {
- painter.drawImage(QPoint(0,0),*qImg);
- }
- else
- {
-
- }
- }
- void openCV::nextFrame()
- {
- frame = cvQueryFrame(capture);
-
- if (frame)
- {
- if (frame->origin == IPL_ORIGIN_TL)
- {
- cvCopy(frame,iplImg,0);
- }
- else
- {
- cvFlip(frame,iplImg,0);
- }
- cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
- cvWriteFrame(writer,frame);
- this->update();
- }
- }
在編譯的目錄下就有out.avi這個視頻文件,要打開視頻文件如下:
- CvCapture *capture;
- IplImage *frame;
- QImage *qImg;
- QTimer *timer;
- capture = cvCaptureFromFile("out.avi");
- if (capture)
- {
- frame = cvQueryFrame(capture);
- if (frame)
- this->resize(frame->width,frame->height);
- qImg = new QImage(QSize(frame->width,frame->height),QImage::Format_RGB888);
- iplImg = cvCreateImageHeader(cvSize(frame->width,frame->height),8,3);
- iplImg->imageData = (char*)qImg->bits();
- timer = new QTimer(this);
- timer->setInterval(30);
- connect(timer,SIGNAL(timeout()),this,SLOT(nextFrame()));
- timer->start();
-
- isCamera = true;
- }
- else
- {
- QMessageBox::information(this,"Information","Sorry,fail!");
- isCamera = false;
- }
- void openCV::paintEvent(QPaintEvent *e)
- {
- QPainter painter(this);
- if(isCamera == true)
- {
- painter.drawImage(QPoint(0,0),*qImg);
- }
- else
- {
-
- }
- }
- void openCV::nextFrame()
- {
- frame = cvQueryFrame(capture);
-
- if (frame)
- {
- if (frame->origin == IPL_ORIGIN_TL)
- {
- cvCopy(frame,iplImg,0);
- }
- else
- {
- cvFlip(frame,iplImg,0);
- }
- cvCvtColor(iplImg,iplImg,CV_BGR2RGB);
- this->update();
- }
- }