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(); } }