windows 10 环境下 openCV如何编译源码生成32位库文件

本文详细介绍了如何在32位Windows环境中手动下载、配置和编译OpenCV源代码,以生成适用于32位系统的库文件。通过CMake工具和Visual Studio 2019,作者逐步指导如何生成和使用OpenCV库,特别强调了生成opencv_world库的步骤。最终,利用编译好的库,创建了一个C++程序,用于从视频中提取第一帧并保存为图片,展示了在32位系统中操作OpenCV的实际应用。
该文章已生成可运行项目,

一 概述

我需要将视频第一帧的图片保存下来当做视频的缩略图。但是我需要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 <opencv2/opencv.hpp>
#include <tchar.h> 
#include <stdio.h>  
#include <iostream>  
#include <math.h>  
#include <ostream> 
//#include<opencv2/core/core.hpp>
//#include<opencv2/video/video.hpp>
//#include<opencv2/highgui/highgui.hpp>

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

 

本文章已经生成可运行项目
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值