准备软件
版本:建议最新版(我的是Opencv4.3.0 Cmake3.18 VS2017 QT5.14)
VS:https://visualstudio.microsoft.com/zh-hans/vs/
Cmake:https://cmake.org/download/
QT:https://download.qt.io
下载源码:qt-opensource-windows-___.exe
Opencv:https://opencv.org/releases/
下载源码:在每个版本下面都有一个压缩包Sources
Opencv拓展包:https://github.com/opencv
下载opencv_contrib Repository for OpenCV’s extra modules
版本适配:每个软件的版本不一样的话,或许会出现不适配的情况,都下载最新版的,应该都不会有问题,需要注意的是,下载VS,Cmake,QT的时候看系统的操作位数是否和电脑一致。
安装
VS安装完毕后,先测试C/C++代码能不能Run。
Cmake安装的时候,有一个类似于环境变量添加到系统的选项,Add Cmake to the system PATH for all users 一定勾选。
在安装QT途中,到模块选择的时候,一定要勾选的msvc20__,具体的后面的看你安装的VS的版本,为了减少出错的可能,我这里建议选择在QT框架中用VS带的编译器。
开始搭建环境
I.首先需要用Cmake编译Opencv源码
II.在VS中搭建Opencv的环境
III.在QT中搭建Opencv的环境
PS:我其实主要是搭建QT的,VS是顺手就搭建了
Cmake编译Opencv
第一步,以防万一,在环境变量中添加Cmake的bin文件
D:\Cmake\bin
我的在D盘,视情况改变。
在Opencv所在路径中创建一个新的文件夹,文件名一般设置为build,在Cmake中的Where to build the binaries栏选中build的路径,source code栏就添加下载好的Opencv源码路径。
然后点击配置(configure)按钮,第一栏就选VS对应的生成器,第二栏选择对应的电脑位数,然后完成(finish),然后就开始编译了。
因为Opencv是全球通用的东西,在下载途中难免会有一些文件下载不下来,总之就是文件不完整,导致编译途中会有报错。但是一般不会影响生成编译文件,但是这样生成的编译文件是不完整的,就这样用的话,在后续的编程中会出现各种报错,等等一系列问题,所以我们应该在Opencv的编译过程中把文件补齐。
在编译途中,出现的报错,一般会给出错误原因,百分之九十五都是文件不完整,剩下的百分之五我还没遇到,因为我已经配置好了,没办法截图,下面我举一个错误例子。
Cmake warning at cmake/OpenCVDownload.cmake:202(masage):
IPPICV:Download failed:56;"Failure when recriving data form the peer"
For details please refer to the download log file:
D:.../build...CmakeDownloadLog.txt
Call ...... //报错内容
这串英文主要告诉我们错误的原因,能看懂最好,看不懂英文也没关系,我们可以不用看懂这串英文,盯着那个文件路径就行了,我们根据路径找到那个文件(CmakeDownloadLog.txt),并打开它,那里边会有文件缺失的所有信息,一般是这个格式:
#use_cache"D:/..."
#do_unpack" 文件 "" 文件名 "" 下载地址 "
#check_md5"D:/...(文件位置)"
......
一般是文件下载不完整,所以CmakeDownloadLog.txt里面会有这些记录,就按照上面的这个格式,我们把下载地址复制,放到浏览器里面去,我遇到的都是直接跳转Github,一般会自动下载,少数几个直接下载不了,但是Github里面有,你把需要下载的文件的父文件夹下载下来,从父文件里面打开拿出来。这些文件下载好之后,对应CmakeDownloadLog.txt里边的文件路径,一个一个的替换掉原来没有下载完全的文件,文件名也要和不完整的文件的名字一样!全部做完这些工作后,进行编译的下一步。
回到Cmake中,有两栏,Name和Value,在Name栏找到WITH_QT,WITH_OPENGL,把后面的两个框框点上勾,找到OPENCV_EXTRA_MODULES,把(开始的时候下载的Opencv拓展包)的路径添加好。那么我们的准备工作就做好了。
重新点击配置(Configure)按钮,等待一段时间,按道理是不会出现红色的东西,如果还有红色的出现,那就上CSDN去寻找解决办法。(反正我是没问题的)最后点击生成(Generate)按钮,那么我们的build文件算是完成了。
接下来,我们打开生成好的build文件,里面有一个OpenCV.sln文件,我们打开它,进入VS界面,就会看到很多Opencv源码,我们点到Debug模式,X64,然后点生成,重新生成解决方案,等一段时间,解决方案生成完成后,一般是没有错误产生的,就算有错误,也不会太多,毕竟我们在Cmake编译的时候也解决了好多错误,如果是有错误产生,那么就去CSDN上去找解决方案,如果是像什么关于python的,对我们用C/C++配Opencv写代码没有影响的错误,我们找到那个报错的文件,移除掉就好,警告的话(在程序员眼中,没有警告,只有错误^_^)移除之后,点击生成解决方案。成功之后,没有错误就行了。
接下来,我们在解决方案的目录中找到CMakeTargets/INSTALL鼠标右键仅用于项目,仅生成INSTALL。我们编译工作就完成了。
VS搭建Opencv编程环境
首先,我们添加Opencv的环境变量,找到刚刚编译好的build文件,跟着下面的这个样子找到bin文件,添加到环境变量。(暴露了我的Opencv版本^_^)
D:\opencv\opencv-4.3.0\build\install\x64\vc15\bin
然后,我们在VS里面新建一个项目,找一段Opencv的测试代码放进去,这时候肯定会爆红,Opencv2/opencv.hpp找不到等等,因为我们的VS中的项目属性还没有添加Opencv的东西。接下来我们把Opencv的东西添加进去。
点击视图/其他窗口/属性管理器,之后会出现Debug和Release模式下不同操作位的属性管理文件,我生成的是Debug X64的,所以打开它,会有几个属性表,我们新建一个属性表,为了以后好找,名字里面带个Opencv,啥名都可以。添加完成后,打开并进行编辑。
通用属性下VC++目录/包含目录中添加以下的路径,build文件下找
D:\opencv\opencv-4.3.0\build\install\include
D:\opencv\opencv-4.3.0\build\install\include\opencv2
通用属性下VC++目录/库目录中添加以下的路径,build文件下找
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib
通用属性/链接器/输入/附加依赖项中添加.lib文件,就是刚刚库目录中的lib中的所有文件名,因为文件有点多,一个一个敲太麻烦,所以我这里教大家写一个处理文件来快速得到这些文件名。在lib文件夹中创建一个文本文档,写入:
DIR*.*/B >LIST.TXT
保存,修改文件后缀,TXT变成bat,然后双击这个文件,就会生成一个新的txt文件,里面会有想要的所有文件的文件名,但是还多出几个不要的,把那几个删除后,复制好,添加到附加依赖项中。完成,保存。
测试代码如下:
#include
#include
using namespace cv;
int main(int arga,char** argv)
{
Mat img = imread("D:/....../**.jpg");
if (img.empty())
{
printf("无法打开图片 \n");
return -1;
}
imshow("output", img);
waitKey(0);
return 0;
}
我们的VS就配置好Opencv的环境了,如果测试代码Run不起来,那么就是环境变量或者属性表没有生效,重启电脑,重新打开就好了。
QT框架中搭建Opencv编程环境
前提Cmake编译Opencv的时候WITH_QT,WITH_OPENGL后面的勾打上了,那么我们编译的Opencv的文件QT才能用。QT搭建没有VS那么复杂。
首先,添加环境变量。(暴露了我的QT版本5.14^_^)
D:\QT\5.14.0\msvc2017_64\bin
第一步,在QT的文件路径中创建一个后缀为.pri的文件,例如:D:\QT\QT_opencv_pri.pri.在这个文件中写入:
INCLUDEPATH += D:/opencv/opencv-4.3.0/build/install/include
CONFIG(debug,debug|release)
LIBS += D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_aruco430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_bgsegm430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_bioinspired430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_calib3d430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_ccalib430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_core430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_datasets430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_dnn430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_dnn_objdetect430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_dnn_superres430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_dpm430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_face430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_features2d430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_flann430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_fuzzy430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_gapi430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_hfs430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_highgui430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_imgcodecs430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_imgproc430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_img_hash430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_intensity_transform430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_line_descriptor430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_ml430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_objdetect430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_optflow430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_phase_unwrapping430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_photo430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_plot430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_quality430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_rapid430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_reg430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_rgbd430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_saliency430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_shape430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_stereo430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_stitching430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_structured_light430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_superres430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_surface_matching430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_text430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_tracking430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_video430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_videoio430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_videostab430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_xfeatures2d430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_ximgproc430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_xobjdetect430d.lib\
D:\opencv\opencv-4.3.0\build\install\x64\vc15\lib\opencv_xphoto430d.lib\
这些都是后缀为lib的文件,文件名在前面的处理文件里边有,但是前面的路径得自己复制一下。
然后创建一个QT Widgets Application项目,编译器选择msvc 20__ 注意搭配电脑的操作位数,在.pro文件末尾添加这句代码
include(D:/QT/QT_opencv_pri.pri)
然后就可以测试了,测试代码如下:
#include "mainwindow.h"
#include "opencv2/opencv.hpp"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
using namespace cv;
Mat img = imread("D:/....../**.jpg");
imshow("output",img);
waitKey(0);
return 0;
}
应该没什么问题了,万行代码,始于编程软件,希望大家在遇到问题的时候有足够的耐心,在后来的编程之路上越来越顺利!
这是我在做计算机视觉的一个项目中踩坑踩出来的总结,如果对你有帮助的话,点个关注呗!一个小小的关注会给我这个编程小白莫大的信心哟!