基于OpenCV实现将视频转化为图片且可设定每秒转化帧数

最近需要制作VOC数据集,需要的样本都是以视频的形式拍摄下来的,所以需要实现将视频转化为图片。

通常,视频的帧率大概为30帧每秒

基于OpenCV实现将视频转化为图片且可设定每秒转化帧数_第1张图片

也就是一秒的视频,如果逐一帧转化则最后转化为30张图片,实事上可能逐帧转化效果并不好,看起来图片几乎一样。因此需要调节每秒传转化帧率。代码:

#include 
#include 
#include 
#include 
#define SAVEPATH "E:/picture/67/" //保存地址
using namespace std;
using namespace cv;
int main()
{
	string file = "E:/video/67.mp4";//读取视频路径
	VideoCapture cap(file);
	if (!cap.isOpened())
	{
		cout << "open video file failed." << endl;
	}
	int frame_cnt = 0;
	int num = 0;
	Mat img;
	
	while (true)
	{
		bool success = cap.read(img);
		if (!success)
		{
			cout<< "Process " << num << " frames from" << file << endl;
			break;
		}
		if (img.empty())
		{
			cout << "frame capture failed." << endl;
			break;
		}
		
		if (frame_cnt % 20 == 0)//转化帧率的标准,%30则是一秒转化一帧图片,也就是每隔30秒保存一次图片
		{
			++num;
			string name = SAVEPATH + to_string(num) + ".jpg";
			imwrite(name, img);
			cout << "processed " << num << " frames.\n" << endl;
		}
		++frame_cnt;
	}
	
	cout << cap.get(CV_CAP_PROP_FRAME_COUNT) << endl;
	cout << cap.get(CV_CAP_PROP_FPS) << endl;
	cap.release();
	return 0;

}

需要改变每秒转化帧率的地方如注释所示

参考文献:

https://blog.csdn.net/qq_38469553/article/details/80804506

你可能感兴趣的:(opencv)