需求分析:

 公司需要做鉴黄的业务,所以需要大量的图片资源,但是图片资源有限,所以只能对视频进行切割采集图片,目前应用市场上有的只能一次性对一个视频进行切割,如果有几百个视频,就需要分别切割几百次,刚好在学openCV,现学现卖,自己临时开发了一个可以同时切割一个目录下所有的视频的工具,可以在切割之前计算所有视频的总图片数量,还可以选择切割的图片数量

 

软件介绍:

  运行环境:windows 64位操作系统

  技术:OpenCV + c++,  用MFC 做了个简单界面 ,用MFC是因为简单,其实MFC已经过时了

  使用场景:需要把视频切割成大量的图片资源的,例如目前的大数据,人工智能,图像分析等等都需要用到大量的图片资源,这个工具应该可以用得上

  相对于其他视频切割软件的优势在于:可以一次性把一个文件夹下面的所有视频列表(或者文件夹列表,里面有视频)同时切割,而且可以选择切割的图片数量,然后均等切割

 

软件界面:

opencv图像分割背景_图片资源

 

核心代码介绍:

解压函数

void unZip(string path, string path1, long number)
{


	vector<String> listPath = getFilePath(path);
	long allTotalFrame = 0;
	for (int i = 0; i < listPath.size(); i++) {
		VideoCapture cap;
		cap.open(listPath[i]);

		// 获取整视频帧数
		long totalFrame = cap.get(CV_CAP_PROP_FRAME_COUNT);
		allTotalFrame = allTotalFrame + totalFrame;
		cout << "第 " << i << " 个视频宗贞数=" << totalFrame << endl;

	}

	cout << "总视频宗贞数=" << allTotalFrame << endl;

	// 根据全部视频总帧数截取10000张图片,也就是每隔 allTotalFrame/10000 帧取一张

	int imgIndex = 0;
	for (int i = 0; i < listPath.size(); i++) {
		VideoCapture cap;
		cap.open(listPath[i]);

		Mat frame;
		cap >> frame;

		for (;;)
		{
			Mat frame;
			cap >> frame;
			if (frame.empty())
			{
				break;
			}

			//char* imageSaveName = new char[200];
			//将图片的路径及名称输入到imageSaveName中
			string str = path1; // "F:\\test2\\";
			string res = str+ "\\" + to_string(imgIndex)+".jpg";
			
			cout << "index == " << imgIndex << endl;

			if (number == 0) {
				if (imgIndex % (int)(allTotalFrame / 10000) == 0) { //假如取10000张,就是每 allTotalFrame/10000 帧截取一张
					cout << "输出图片" << endl;
					imwrite(res, frame);
				}
			}
			else {
				if (imgIndex % (int)(allTotalFrame / number) == 0) { //假如取number张,就是每 allTotalFrame/number 帧截取一张
					cout << "输出图片" << endl;
					imwrite(res, frame);
				}
			}
			imgIndex++;
		}
	}
}

 

因为时间关系就不详细介绍源码了,想了解更多的可以下载源码,源码的运行需要配置opencv环境哈,我的前几篇博客有介绍怎么配置opencv环境

源代码下载地址:

(网盘下载地址)https://pan.baidu.com/s/1urrl2Xa6R4lRwbbKpBZGJg

(github下载地址)https://github.com/SSYSSK/VideoZIP (里面也包括.exe 安装包)

软件下载地址:https://pan.baidu.com/s/1oFNhTrBubVyq2ac4tRu6jA