OpenCV之视频分析与对象跟踪(一) 视频读写

动画是通过连续播放一系列禁止的画面,当连续播放达到一定的速度时,我们用肉眼看到的就是动画了。它的基本原理与电影,电视一样,都是利用视觉原理。医学已经证明,人的眼睛具有“视觉暂留”特性,就是人的眼睛看到一幅画面或一个物体后,在1/24秒内不会消失,利用这一视觉变化效果。因此电影采用了每秒24幅画的速度拍摄播放,电视采用了每秒25幅(PAL制)或30幅(NSTC制)画面的速度拍摄播放,如果以每秒低于24幅画面的速度拍摄播放,就会出现停顿现象。
帧率:即每秒播放的帧数。帧率的大小直接影响到动画的快慢。帧率的单位是“帧/秒”,即“fps”,flash中默认为12fps.由于计算机显示器的荧光刷新特性,实际看到的相当于24帧,刚好达到了动画的一般要求。

 

#include 
#include 

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	//VideoCapture capture;
	//capture.open("01.mp4");
	VideoCapture capture(0);
	if (!capture.isOpened()) {
		printf("could not load video data...\n");
		return -1;
	}
	// 获取帧的属性包括视频帧率,视频宽度,视频高度
	double fps = capture.get(CV_CAP_PROP_FPS);
	Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
	printf("FPS : %f", fps);
	VideoWriter writer("D:/vcprojects/images/wv_demo.mp4", CV_FOURCC('D', 'I', 'V', 'X'), 15.0, size, true);

	// create window
	Mat frame, gray, binary;
	namedWindow("video-demo", CV_WINDOW_AUTOSIZE);

	// show each frame and save
	while (capture.read(frame)) {
		//inRange(frame, Scalar(0, 127, 0), Scalar(127, 255, 127), gray);
		//cvtColor(frame, gray, COLOR_BGR2GRAY);
		//threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
		//bitwise_not(frame, frame);
		flip(frame, frame, 0);

		/*
		void flip(InputArray src,	
				  OutputArray dst, 
				  int flipCode	    flipCode ==0	沿X轴翻转
						    flipCode > 0	沿Y轴翻转
						    flipCode < 0	旋转180°
				  )
		*/
		imshow("video-demo", frame);
		writer.write(frame);
		char c = waitKey(100);
		if (c == 27) {
			break;
		}
	}

	capture.release();
	writer.release(); // 释放资源

	waitKey(0);
	return 0;
}

 

你可能感兴趣的:(OpenCV)