目录
下载
安装步骤
1、打开cmake-gui.exe对opencv源码进行编译
错误一:CMake's 'find_host_package(PythonInterp 2.7)' found wrong Python version:
错误二:下载ippicv_2020_win_ia32_20191018_general.zip失败,提示SSL connect error或者是Counldn't resolve host name
错误三:opencv_videoio_ffmpeg.dll,opencv_videoio_ffmpeg_64.dll,ffmpeg_version.cmake下载失败。
2、将opencv_contrib中额外的模块添加到opencv中,并根据官方建议设置需要build的部分。
3、generate
4、Vs2019打开OpenCV.sln,生成解决方案(可省略)
5、选择CMakeTargets->INSTLL 右键生成
6、Vs2019创建C++项目并引用opencv库
创建项目
设置项目的依赖项和引入的库文件
代码测试
编译好的OpenCV下载
下载
opencv-4.5.5:https://github.com/opencv/opencv/tree/4.5.5
opencv_contrib:https://github.com/opencv/opencv_contrib
cmake:Download | CMake
安装步骤
1、打开cmake-gui.exe对opencv源码进行编译
在bin中打开cmake-gui.exe
在opencv文件夹下创建了一个名为“build”文件夹。source code 选择下载的Opencv源码的路径,where to build the binaries选择build文件夹的路径,然后点Configure。
选择Visual Studio 2019,其他的选项默认即可,然后点Finish,等待编译。
错误一:CMake's 'find_host_package(PythonInterp 2.7)' found wrong Python version:
CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):
CMake's 'find_host_package(PythonInterp 2.7)' found wrong Python version:
PYTHON_EXECUTABLE=D:/anaconda/anaconda3/python.exe
PYTHON_VERSION_STRING=3.8.8
Consider providing the 'PYTHON2_EXECUTABLE' variable via CMake command line
or environment variables
Call Stack (most recent call first):
cmake/OpenCVDetectPython.cmake:271 (find_python)
CMakeLists.txt:627 (include)
因为我需要使用到python3.9,为了防止安装python2之后会有未知的影响,我在anaconda中创建了一个虚拟环境,用于安装python2。然后将PYTHON2_EXECUTABLE变量改为python2的安装路径。
错误二:下载ippicv_2020_win_ia32_20191018_general.zip失败,提示SSL connect error或者是Counldn't resolve host name
解决方法:
1、在build文件夹中打开日志文件:CMakeDownloadLog.txt,找到ippicv_2020_win_ia32_20191018_general.zip文件的下载链接。
2、打开浏览器:GitHub Proxy 代理加速,复制链接到浏览器就可以下载。
3、将下载好的ippicv_2020_win_ia32_20191018_general.zip复制到opencv/3rdparty/ippicv中。
4、修改make文件:打开opecv/3rdparty/ippicv/ippicv.make文件,将ocv_download语句注释掉。
错误三:opencv_videoio_ffmpeg.dll,opencv_videoio_ffmpeg_64.dll,ffmpeg_version.cmake下载失败。
1、在build文件夹中打开日志文件:CMakeDownloadLog.txt,找到opencv_videoio_ffmpeg.dll,opencv_videoio_ffmpeg_64.dll文件的下载链接:
在GitHub Proxy 代理加速浏览器中复制上述链接,下载文件,将下载好的文件复制到opencv/3rdparty/ffmpeg中。
2、在日志文件中找到ffmpeg_version.cmke的下载链接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/ffmpeg_version.cmakes
在GitHub Proxy 代理加速浏览器中打开却不能下载,而是出现如下的界面:
这个时候我们需要手动创建文件,在opecv/build/3rdparty创建名为ffmpeg的文件夹,然后在ffmped的文件夹中创建ffmpeg_version.cmake的文件,将上面的内容复制到ffmpeg_version.cmake文件中即可。
3、修改make文件:打开opecv/3rdparty/ffmpeg/ffmpeg.make文件,将一下语句注释掉。
将以上错误修改完成后,点Configure重新编译。
2、将opencv_contrib中额外的模块添加到opencv中,并根据官方建议设置需要build的部分。
勾选以下选项。
将OPENCV_EXTRA_MODULES_PATH的值设置为<opencv_contrib>/modules。
然后重新编译。
错误:文件下载失败,按照上面的办法手动下载文件,下载完成之后。在build文件中创建downloads文件夹,在该文件夹中创建wechat_qrcode和xfeatures2d两个文件夹。将boostdesc_bgm.i、boostdesc_bgm_bi.i、boostdesc_bgm_hd.i、boostdesc_binboost_064.i、boostdesc_binboost_128.i、boostdesc_binboost_256.i、boostdesc_lbgm.i、vgg_generated_48.i、vgg_generated_64.i、vgg_generated_80.i、vgg_generated_120.i放在opencv-4.5.5\build\downloads\xfeatures2d文件夹中,将detect.caffemodel、detect.prototxt、sr.caffemodel、sr.prototxt放在opencv-4.5.5\build\downloads\wechat_qrcode文件夹中。
修改opencv_contrib-4.x\modules\xfeatures2d\CMakeLists.txt
修改opencv_contrib-4.x\modules\wechat_qrcode\CMakeLists.txt
3、generate
在Configure完成,没有错误后,选择Generate。Generating done表示Generate完成,此时在build文件夹中会生成.sln文件。
4、Vs2019打开OpenCV.sln,生成解决方案(可省略)
选择Release版本,选择项目,右击生成
选择CMakeTargets->INSTALL,右键生成解决方案
在opencv-4.5.5\build\bin\Release目录中会生成很多exe文件,找到example_cpp_contours2.exe,双击运行,如下,表示解决方案生成正确。
5、选择CMakeTargets->INSTLL 右键生成
错误: setloca......已退出,代码为1
从网上查了很多办法不无法解决,最终在输出页面发现真正的错误是:
在用cmake编译的时候下载过opencv_videoio_ffmpeg_64.dll这个文件,将文件复制到opencv-4.5.5/build/3rdparty/ffmpeg/目录中,之后重新生成,历尽千辛万苦终于成功了。INSTALL完成之后在opencv-4.5.5/build/install目录下是我们需要的lib、dll以及头文件,以下是部分截图。
6、Vs2019创建C++项目并引用opencv库
创建项目
设置项目的依赖项和引入的库文件
打开项目->属性,在VC++目录中修改库目录为opencv-4.5.5\build\install\x64\vc16\lib。
在VC++目录中修改包含目录,将opencv的头文件引入到项目中。
将opencv-4.5.5\build\install\x64\vc16\lib文件夹的所有lib文件添加到链接器->输入->附加依赖项中。(如果是opencv是release下编译的,是*.lib,debug下编译的则是*d.lib,要根据项目情况添加,项目是release添加*.lib,项目是debug添加*d.lib)
代码测试
注意这里项目要在release,x64下运行,因为opencv编译时选择的是realease,x64
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("1.jpg");
imshow("img", img);
waitKey();
}