今天主要是学习下opencv 视频操作。
1.录制视频
//打开笔记本摄像头
VideoCapture capture(1);
//先调用构造函数确定文件的名称,格式,帧率,帧大小,是否彩色。其中格式作为第二个参数,
VideoWriter writer("VideoTest1.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
Mat frame;
while (capture.isOpened())
{
capture >> frame;
if ((frame.rows == 0) || (frame.cols == 0))
{
printf("frame capture failed\n");
system("pause");
exit(0);
}
writer << frame;
imshow("video", frame);
if (cvWaitKey(20) == 27)
{
break;
}
}
2.读取视频并前进后退
VideoCapture cap;
int g_slide_position = 0;
void onTrasckbarSlide(int pos)
{
cap.set(CV_CAP_PROP_POS_FRAMES, pos);
}
int main()
{
//读取视频,前进后退
cap.open("VideoTest1.avi"); //打开视频,以上两句等价于VideoCapture cap("E://2.avi");
//也可以直接从网页中获取图片,前提是网页有视频,以及网速够快
if (!cap.isOpened())//如果视频不能正常打开则返回
return 0;
Mat frame;
cvNamedWindow("我的摄像头", CV_WINDOW_AUTOSIZE);
int frames = (int)cap.get(CV_CAP_PROP_FRAME_COUNT);
if (frames != 0)
{
cvCreateTrackbar("positions", "我的摄像头", &g_slide_position, frames, onTrasckbarSlide);
}
while (1)
{
cap >> frame;//等价于cap.read(frame);
if (frame.empty())//如果某帧为空则退出循环
break;
imshow("我的摄像头", frame);
waitKey(20);//每帧延时20毫秒
cvSetTrackbarPos("positions", "我的摄像头", g_slide_position);
g_slide_position++;
}
cap.release();//释放资源
cvDestroyWindow("我的摄像头");
return 0;
}
源码
https://gitee.com/350958226/opencv_test.git
中的video_test 项目