[opencv笔记二]opencv视频处理

 今天主要是学习下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 项目

你可能感兴趣的:(Opencv,C++)