OpenCv-C++-视频分析与对象跟踪-视频与摄像头读写

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Daker_Huang/article/details/86472018

OpenCV中如何读取一个视频以及打开一个摄像头。
我们还可以获得帧率,一般来说,1s如果能有15帧的话这个视频比较流畅,人眼分辨不出来它是图片。

帧率显示:
在OpenCv中,读取视频时能显示帧率,主要用到的函数是double fps = capture.get(CV_CAP_PROP_FPS);当然,读取摄像头时这个函数就不管用了。

视频写入:
我们对从摄像头获取的视频,将它写入到本地路径中,主要用VideoWriter这个类。具体写法为:VideoWriter videowrite = VideoWriter("D:/test/vw.avi", -1, 15, size,true);
其中,"D:/test/vw.avi"为存放路径,-1表示自动编码,15表示帧率,size表示窗口大小,true表示彩色视频,如果为false,则是灰色视频。

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;


int main(int argc, char** argv)
{
	VideoCapture capture(0);//打开摄像头
	//VideoCapture capture;
	//capture.open("D:/test/vw.avi");
	Mat frame, gray;
	if (!capture.isOpened())
	{
		printf("摄像图未读取到...");
		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));
	VideoWriter videowrite = VideoWriter("D:/test/vw.avi", -1, 15, size,true);
	printf("FPS:%f\n", fps);
	//定义的Mat,String等不要写在while中,这样会浪费资源,增加cpu计算时间
	while (capture.read(frame))
	{
	flip(frame, frame, 1);//镜头左右调换
		imshow("video", frame);
		videowrite.write(frame);//视频写入
		char c = waitKey(50);
		if (c == 27)
		{
			break;
		}

	}
	waitKey(0);
	return 0;


}


}

猜你喜欢

转载自blog.csdn.net/Daker_Huang/article/details/86472018