背景
项目背景是视觉定位引导机械臂,采用opencv开源算法做相机标定、手眼标定。由于官网安装包安装后只有x64版本库,故下载源码自行编译32位debug/release版本库。
准备工作
- 安装Visual Studio ,最好使用vs2017编译,我个人在编译opencv340的时候用的vs2013,在编译opencv450时用过vs2015(失败,因为部分C++11标准编译器不支持 ),然后采用vs2017成功编译;
- 安装CMAKE工具,link.,我编译的时候用的3.15.2版本;
- 下载相应版本源码 ,link.;
- 解压下载的源码,我个人将解压后的源码文件放在source文件夹下,并同目录建立了一个build文件夹,如图:
- 以上工具、源码、编译中需要下载的文件、最终编译生成的32位/64位的debug/release版本库(最终编译库好像上传失败cry------,若需要可私信),都将在百度云盘中共享
- opencv340: 链接:https://pan.baidu.com/s/1CfU9AYXOEvCRYruzSf4Bvg
提取码:8r4m - opencv450: 链接:https://pan.baidu.com/s/1doaFqni8OtaFFvjHhJLlSQ
提取码:5few - 工具: 链接:https://pan.baidu.com/s/19fOnuAWsHwj12vh-IdyItw
提取码:7upa
编译过程
- 打开cmake工具,添加源目录和编译后文件的存放目录
- 点击configure,选择配置编译器和编译的opencv库的位数【win32】,点击finish:
- 点击configure,选择配置编译器和编译的opencv库的位数【win32】,点击finish:
- 勾选“BUILD_opencv_world”,取消勾选“BUILD_CUDA_STUBS”,取消勾选"BUILD_JAVA"
- 添加下载好的“D:\opencv\opencv450\opencv_contrib-4.5.0\modules”到OPENCV_EXTRA_MODULES_PATH,并勾选 OPENCV_EXTRA_NONFREE项,否则在运行SIFT、SURF等函数时会报错;
- OPENCV_EXTRA_MODULES_PATH配置说明:由于OpenCV功能越来越臃肿,OpenCV3改变了项目架构,使用内核+插件的架构形式。 因此,OpenCV从2.x到4.x是一个很大的转变,对于很多功能不完善、性能不稳定的模块,都被放到了extra_modules(扩展模块)里面了。在Github中,除了存放正式版OpenCV的主仓库和新增加的OpenCV_extra仓库外,还添加了一个OpenCV_contrib的全新仓库,功能有:脸部识别、文本识别、边缘检测、追踪算法等,里面存放的是功能未稳定的代码,如果需要使用这些功能,就需要重新进行编译。
- 配置完成后,点击Generate,等待完成,需要一定时间。可能报一些错误,我遇到的基本上是网络下载库失败。下载云盘里分享的文件,放到日志文件对应的目录下,即可正常通过,具体看下文。
编译问题分析
- 无法访问国外的网站导致下载超时而失败,首先打开文件build/CMakeDownloadLog.txt,如下所示:
指定缓存文件夹
#use_cache "/home/user/Project/OpenCV/opencv/.cache"
解压路径
#do_unpack "ippicv_2019_lnx_intel64_general_20180723.tgz" "c0bd78adb4156bbf552c1dfe90599607" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz" "/home/user/Project/OpenCV/build/3rdparty/ippicv"
文件校验
#check_md5 "/home/user/Project/OpenCV/opencv/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz"
文件校验失败
#mismatch_md5 "/home/user/Project/OpenCV/opencv/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz" "d41d8cd98f00b204e9800998ecf8427e"
删除下载文件
#delete "/home/user/Project/OpenCV/opencv/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz"
下载文件
#cmake_download "/home/user/Project/OpenCV/opencv/.cache/ippicv/c0bd78adb4156bbf552c1dfe90599607-ippicv_2019_lnx_intel64_general_20180723.tgz" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/32e315a5b106a7b89dbed51c28f8120a48b368b4/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz"
# Trying 0.0.0.0...
# TCP_NODELAY set
# connect to 0.0.0.0 port 443 failed: Connection refused
# Trying ::...
# TCP_NODELAY set
# connect to :: port 443 failed: Connection refused
# Failed to connect to raw.githubusercontent.com port 443: Connection refused
# Closing connection 0
#
- 下载文件那一行中找到下载地址和存放地址即可,手动下载并存放到相应目录。本人在百度云盘中分享了opencv340和opencv450对应的文件,注意编译不同版本文件不同,不能混用。
- 操作完成后再次点击Generate,等待完成。