提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
最近想利用ChArUco标定板来实现重叠视场比较小的的双目相机标定,由于opencv自带ArUco、ChArUco的相关函数,所以直接利用opencv的库函数在VS2019上标定了,但是此库在opencv的扩展库opencv_contrib中,需要下载还有编译。
一、OpenCV下载以及CMake下载
详见博客:https://blog.youkuaiyun.com/qq_15243129/article/details/126805344
OpenCV版本:4.4.0
CMake版本:3.24.1
二、扩展库opencv_contrib下载
下载地址:https://github.com/opencv/opencv_contrib/tags
注意!!一定要选择与opencv版本一样的opencv_contrib进行编译,否则将会出现错误,有很多的工程不能编译通过,不能产生相应的lib文件。
三、python3.10.6下载
下载python时**一定得带上Download debug binaries (requires vS 2015 or ater)**如果没有,后续编译会报错,具体错误看下面第五部分。
python下载教程很多,但是由于缺少下载项会导致后续编译不通过,当时我就重新下载了个python。重新下载时把能够选的全都勾选了,即能下载的都下载了。
四、使用CMake编译OpenCV3.4.6
1.在下载opencv的目录中新建文件夹cmake_build_opencv_contrib
首先为了避免不必要的麻烦,文件取名满足以前学过的c语言命名要求,即字母、数字、下划线。还有为了以后方便找,我把下载的扩展库文件也放到这个文件夹下了
2.用CMake编译OpenCV4.4.0
step1:
路径1选择opencv下载完后的sources
路径2选择刚刚新建的文件夹。
step2:
点击Configure**会出现以下选项,我电脑安装的vs2019。
step3:
找到OPENCV_EXTRA_MODULES_PATH,后面添加路径F:\opencv\opencv_contrib-4.4.0\modules,精确到\modules 。勾选上面的OPENCV_ENABLE_NONFREE。并且将WITH_MSMF和WITH_MSMFDXVA两个选项去掉(很多人可能不理解,这是在VS编译工程的时候会”出现videoio.lib,highgui.lib找不到“错误,我百度了很久才发现这个解决方案,如果不放心可以先不勾掉,等编译报错了,再重新cmake一遍。)
参考:https://zhuanlan.zhihu.com/p/114526376
step4:
解决问题
加载完后,向上滑动一下进度条,大概率会有红色报错,以下是我遇到的问题以及解决方案:
问题1:
IPPICV: Download failed: 6;“Couldn‘t resolve host name“
解决方案:IPPICV: Download failed: 6;“Couldn‘t resolve host name“
问题2:
CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install
directory
解决方法: 在搜索框中输入OPENCV_GENERATE_SETUPVARS,去除勾选即可
参考:CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message)
问题3:
FFMPEG: Download failed: 6;“Couldn‘t resolve host name“
意思是扩展库缺少文件
解决方案:
https://blog.youkuaiyun.com/qq_15243129/article/details/126805344
https://blog.youkuaiyun.com/free_luojing/article/details/123261061
问题4:
xfeatures2d/boostdesc: Download failed: 6; “couldn’t resolve host name”
这个和问题3是一样的,缺少文件。
这个问题网上大都是复制11个文件到指定文件夹,但在我这里没有用。我参考这个,用的修改网址的方法。
问题5:
data: Download failed: 6; “couldn’t resolve host name”
解决方案:
这个问题我在csdn上没有找到解决方案,但我受到问题4的启发(看显示出的问题都差不多),就把F:\opencv\opencv_contrib-4.4.0\modules\face\ 'CMakeLists.txt的
https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}
改成:
https://raw.staticdn.net//opencv/opencv_3rdparty/${__commit_hash}
问题6:
CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message):
CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install
directory
Call Stack (most recent call first):
CMakeLists.txt:1084 (include)
解决方案:在搜索框中输入OPENCV_GENERATE_SETUPVARS,去除勾选
参考这个
step5:
好了后再Generate。
五、在VS019上编译
step1:
打开F:\opencv\cmake_opencv_contrib\OpenCV.Sln,对CMakeTargets下的INSTALL,在Debug和Release下分别右键生成。
问题:在Debug下:
问题就是python没安装。我是重新安装的,网上都是想着重命名或者网上的修改什么文件的,我没用
参考:
https://zhuanlan.zhihu.com/p/114526376
https://blog.youkuaiyun.com/weixin_43788499/article/details/84933210
在Release我问题很多:
我就没改了,直接用DeBug了。
step2
在系统环境变量的PATH中加上
F:\opencv\cmake_build_opencv_contrib\install\x64\vc16\bin
F:\opencv\cmake_build_opencv_contrib\install\x64\vc16\lib
step3
在最后:通用属性—>链接器—>输入—>附加的依赖项。
具体方法:参考:https://zhuanlan.zhihu.com/p/114526376
读取文件名是在F:\opencv\cmake_build_opencv_contrib\install\x64\vc16\lib新建了个test.txt,然后内容是:
import os
for name in os.listdir('./'):
print(name)
之后改后缀.py然后终端中打开,python ./ test.txt。就显示文件夹下所有内容。注意去除CMake文件和.py文件。
配置好后的DeBug x64命名为Opencv_Contrib.props。
日后新opencv工程就在:属性管理器-DeBug|X64把D盘c++代码-aruco里的Opencv_Contrib.props复制过来就行。
后来我新建了个工程后在:新工程-视图-其他窗口-属性管理器-DeBug|X64-右击-添加现有属性表-选择复制到该工程目录下的Opencv_Contrib.props文件。但好像效果不好,问题出现在Debug要选择X64,默认X86了要改过来。
六、测试
包含头文件不报错就好了
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/aruco/charuco.hpp>
#include <opencv2/highgui.hpp>
#include <string.h>
#include<iostream>
#include<math.h>