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