一 概述
我需要将视频第一帧的图片保存下来当做视频的缩略图。但是我需要32位的环境,因为我朋友的电脑有可能不支持64位。官网下的windows版的环境只有64位。
二 实操
(一).下载openCV源文件
下载地址:https://opencv.org/releases/ 【注】不用下最新的,比新的旧一个版本最好。新的坑让烈士去踩吧,我们需要稳定就好。
如果想直接使用64位的库,直接下载2就可以了。2包括1中的源代码。我们下2就好了,下面是解压之后的目录,下过来是exe,其实不是安装,直接解压就好。
(二).下载CMake工具
下载地址:https://cmake.org/download/
(三). 通过CMake工具生成vs2019的openCV工程解决方案
【注】1.如果要想生成opencv_world 需要在红色框哪里找到它,勾选上,随着版本不同,会有不同的版本号后缀名。
2.把java 和 python的都去掉,我们又用不着,编译还花时间。
配置好之后,会需要一点时间等待生成,生成成功之后,就可以打开工程文件了。耗时的工作才刚开始。
(四).操作vs2019
只需要生成INSTALL就可以了,点击生成,接下来就是慢长的等待,一般不不会出错。
上面就是我们需要的32位的库文件。和官方64位的目录结构不是一样啊,就是少了java和python
唯一不同的是,我们的32位的lib和dll为什么这么多啊。而且也没有官方的opencv_world xxx 库。这是因为opencv_world需要在cmake编译时,勾选上。
opencv_world是把所有的库文件都打包在一起了,我们自己编译的是散装的,用到哪个可以选哪个。可以减少项目大小。
(五) 用一下
1.创建一个C++空项目
2.配置一下
2.1.配置头文件
2.2配置lib目录
2.3配置用到的lib
opencv_core451d.lib
opencv_video451d.lib
opencv_videoio451d.lib
opencv_imgcodecs451d.lib
2.4 将dll拷贝到运行目录
【注】d结尾表示debug版本,至于用到哪个库,根据报错提示去寻找,然后添加即可
3.3创建一个main.cpp文件
#include
#include
#include
#include
#include
#include
//#include
//#include
//#include
using namespace std;
using namespace cv;
void main()
{
//类VideoCapture实例化再初始化
//VideoCapture capture;
//capture.open("Megamind.avi");
//类VideoCapture实例化的同时初始化
VideoCapture capture("G:/ResourcePool/视频/001.mp4");
if (!capture.isOpened())
{
return;
}
int imgIndex = 0;
/*for (;;)
{*/
Mat frame;
capture >> frame;
if (frame.empty())
{
/*break*/;
return;
}
char* imageSaveName = new char[200];
//将图片的路径及名称输入到imageSaveName中
sprintf_s(imageSaveName, 200, "G:/ResourcePool/视频/%d.jpg", imgIndex);
//将每一帧图像frame保存到imageSaveName指定的文件中
imwrite(imageSaveName, frame);
delete[] imageSaveName;
/* imgIndex++;
}*/
cout << "total frames1: " << imgIndex << endl;
}
【注】如果使用release版本,选择对应的lib和dll即可。不要直接复制debug版本,改名称,即去掉后缀d,这样有问题,会提示无法找到程序入口,最好的办法,就是清空生成目录,重新生成,然后运行,会提示缺少dll,这样少什么,就拷贝什么。2021-04-25