OpenCV库很强大,不仅能够显示图片,还能解码显示各种格式的视频文件,而且提供的API接口也很多,包括C、C++、Python。下面比较一下分别使用C和C++播放一段视频文件的实现:
C语言实现
$ cat test_video.c
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <stdio.h>
int main(int argc, char **argv)
{
CvCapture *cap;
IplImage *frame;
cap = cvCaptureFromFile("./kakou.mp4");
printf("cap = %p\n", cap);
while ((frame = cvQueryFrame(cap))) {
//printf("frame = %p\n", frame);
cvShowImage("MyTest", frame);
cvWaitKey(33);
}
return 0;
}
$ gcc -o test_video test_video.c -lopencv_core -lopencv_imgproc -lopencv_highgui
C++语言实现
$ cat test_video.cpp
#include <iostream>
#include <opencv/highgui.h>
using namespace std;
using namespace cv;
int main(void){
//打开视频文件
VideoCapture capture("./kakou.mp4");
//isOpen判断视频是否打开成功
if(!capture.isOpened())
{
cout<<"Movie open Error"<<endl;
return -1;
}
//获取视频帧频
double rate=capture.get(CV_CAP_PROP_FPS);
cout<<"帧率为:"<<" "<<rate<<endl;
cout<<"总帧数为:"<<" "<<capture.get(CV_CAP_PROP_FRAME_COUNT)<<endl;//输出帧总数
Mat frame;
namedWindow("Movie Player");
double position=0.0;
//设置播放到哪一帧,这里设置为第0帧
capture.set(CV_CAP_PROP_POS_FRAMES,position);
while(1)
{
//读取视频帧
if(!capture.read(frame))
break;
imshow("Movie Player",frame);
//获取按键值
char c=waitKey(33);
if(c==27)
break;
}
capture.release();
destroyWindow("Movie Player");
return 0;
}
$g++ -o test_video test_video.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui
来一个效果图:
image.png
网友评论