OpenCV编译(CMake方式/Win环境)错误处理、VS编译环境配置、Python相关包安装

编译方式:CMake

环境:Windows 10

主要用于:Python开发 +Visual Studio C++开发(如果要用Qt开发,请看我的另一篇文章)

一、 CMake编译 OpenCV 错误处理

1. 部分文件联网下载失败导致opencv过不了cmake

问题描述:configure报错:IPPICV: Hash mismatch

一、ippicv_2020_win_intel64_20191018_general.zip下载失败

方法一、

进入opencv3.4.2\sources\3rdparty\ippicv目录
将 ippicv.cmake 的https://raw.githubusercontent.com
修改为:https://raw.staticdn.net

方法二、直接去网址下载:

直接搞可能需要FQ,推荐使用https://ghproxy.com/

解决方案:参考

打开E:\Tools\OpenCV\OpenCV-4.5.5-Build文件夹下的CMakeDownloadLog.txt找到

#do_unpack "ippicv_2020_win_intel64_20191018_general.zip" "879741a7946b814455eee6c6ffde2984" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip" "E:/Tools/OpenCV/OpenCV-4.5.5-Build/3rdparty/ippicv"
#check_md5 "E:/Tools/OpenCV/opencv-4.5.5/.cache/ippicv/879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip"

可以从中找到下载地址为:https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip

https://ghproxy.com/的搜索框输入即可下载

下载完成后,重命名为879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip,最后将重命名后的文件放入E:\Tools\OpenCV\opencv-4.5.5.cache\ippicv中

重新configure。

 

下面的二、三、四、五等文件下载失败,同样适用两种方法。

二、opencv_videoio_ffmpeg_64.dll、opencv_videoio_ffmpeg.dll下载失败
进入opencv3.4.2\sources\3rdparty\ffmpeg目录
将 ffmpeg.cmake 的https://raw.githubusercontent.com
修改为:https://raw.staticdn.net

三、boostdesc_bgm.i相关文件下载失败
进入opencv_contrib-3.4.2\modules\xfeatures2d\cmake目录
将 download_boostdesc.cmake中的https://raw.githubusercontent.com
修改为:https://raw.staticdn.net

四、vgg_generated_120.i相关文件下载失败
进入opencv_contrib-3.4.2\modules\xfeatures2d\cmake目录
将 download_vgg.cmake中的https://raw.githubusercontent.com
修改为:https://raw.staticdn.net

五、face_landmark_model.dat下载失败
修改.\opencv_contrib-3.4.2\modules\face\CMakeLists.txt,
将https://raw.githubusercontent.com
修改为:https://raw.staticdn.net

之后重新configure即可。一次不行,多试几次。



2. ModuleNotFoundError: No module named 'numpy.distutils'

解释:

ModuleNotFoundError: No module named 'numpy.distutils' 表示 Python 无法找到名为 numpy.distutils 的模块。这通常是因为 numpy 没有正确安装,或者安装的 numpy 版本不包含 distutils 子模块。

解决方法:

  1. 确认 numpy 是否已安装:在命令行中运行 pip show numpy 查看 numpy 是否已安装以及其版本信息。

  2. 如果未安装,使用 pip install numpy 安装 numpy

  3. 如果已安装,但问题仍然存在,可能是 numpy 安装不正确或损坏。尝试重新安装 numpypip uninstall numpy 然后 pip install numpy

  4. 确保使用的 Python 环境是正确的,如果在虚拟环境中工作,确保虚拟环境已激活。

  5. 如果问题依旧,可能是 Python 环境中存在多个版本的 numpy,检查 sys.path 确认导入的是预期的 numpy 版本。

3.OpenCV does not recognize MSVC_VERSION "1938". Cannot set OpenCV_RUNTIME

解释:

这个错误表明你的OpenCV库不能识别版本号“1938”,这通常是因为Visual Studio的版本号与OpenCV的MSVC_VERSION设置不匹配。MSVC_VERSION是一个环境变量,用于指定使用的Microsoft Visual C++编译器的版本。

opencv3.3.1的版本大约是在2017年,这时候VS2019还没有出来吧,对应的微软内部ID版本号,自然是没有出来,我们只要稍微改一下配置的Makefile就可以了:

解决方法:

  1. 确认你安装的Visual Studio版本。通常,Visual Studio的版本号是一个四位数,例如“1600”代表Visual Studio 2010,“1900”代表Visual Studio 2015,“1910”代表Visual Studio 2017,“1920”代表Visual Studio 2019,且随着每个主要版本的发布而增加
  2. 如果你使用的是Visual Studio 2019,那么正确的MSVC_VERSION应该是“1928”(对于Visual Studio 2019版本16.8)或更高。
  3. 我用的是Visual Studio 2022,MSVC_VERSION=1938,对应vc版本为17
  4. 打开 opencv331/opencv/cmake/OpenCVDetectCXXCompiler.cmake,添加以下内容

 

4. Visual Studio2022 编译报错“hash_compare”: 未定义基类 

\opencv-3.4.19\3rdparty\protobuf\src\google/protobuf/stubs/hash.h(255,14): error C2504: “hash_compare”: 未定义基类 

解释:VS2022版本太新,/hash.h文件对于VS2022 不支持。

解决办法:

打开上面文件\opencv-3.4.19\3rdparty\protobuf\src\google/protobuf/stubs/hash.h,然后定位到_MSC_VER,修改成以下内容。

#elif defined(_MSC_VER)
# if _MSC_VER >= 1900  // Since Visual Studio 2022
#  define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#  include <hash_map>
#  define GOOGLE_PROTOBUF_HAS_CXX11_HASH
#  define GOOGLE_PROTOBUF_HASH_COMPARE stdext::hash_compare
# elif _MSC_VER >= 1600  // Since Visual Studio 2010

 

二、VS编译环境配置

(7:PATH设置为你的openc_cv install目录下的bin文件夹,对我来说,就是E:\Qt_Opencv_Build\3-opencv_contrib\opencv-4.5.2\build-for-py\install\x64\vc17\bin

 

测试程序:

#include <opencv2/opencv.hpp>
#include <opencv2/core/utils/logger.hpp>//日志头文件
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	//utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//不输出日志
	//utils::logging::setLogLevel(utils::logging::LOG_LEVEL_ERROR);//只输出错误日志
	Mat src = imread("C:/Users/12421/Desktop/Lena.jpg");
	if (src.empty())
	{
		cout << "please cheak image path" << endl;
		return -1;
	}

	Mat src_x, src_y, src_xy;
	flip(src, src_x, 0);//沿x轴对称
	flip(src, src_y, 1);//沿y轴对称
	flip(src, src_xy, -1);//沿x轴对称,沿y轴对称

	imshow("src", src);
	imshow("src_x", src_x);
	imshow("src_y", src_y);
	imshow("src_xy", src_xy);

	waitKey(0);

	return 0;
}

 

三、Python相关包安装

在安装好python 和 pip 之后,安装以下包:

python -m pip install numpy matplotlib opencv-python

 

参考资料:

1、 《编译Opencv3.3.1遇到的编译器无法识别的警告的问题解除:》https://blog.csdn.net/yellow_hill/article/details/135941157

2、《部分文件联网下载失败导致opencv过不了cmake解决办法》https://blog.csdn.net/weixin_42386056/article/details/105576333

3. 《cmake解决opencv编译失败》:https://blog.csdn.net/weixin_44733606/article/details/131721057

4. 《Visual Studio 2022配置OpenCV455+CMake(Win11)》https://blog.csdn.net/qq_44658189/article/details/125030551

  推荐:很全面的文章,尤其很好地解决了“ippicv:hash notmatch”的问题。

5. 《/protobuf/stubs/hash.h(242,2)》原文链接:https://blog.csdn.net/durongze/article/details/134439134

  推荐:解决了Visual Studio 2022编译ALL BUILD时出现的问题。

posted @ 2024-04-19 15:21  FBshark  阅读(1336)  评论(0编辑  收藏  举报