赞
踩
目录
5.2 将在VS项目中创建opencv文件夹,将需要的库文件放到VS中
首先我的学习基于前辈的总结和自己的理解学习。
首先引入我所学习的几位前辈的文章拜阳前辈文章,Chris_zhangrx前辈的文章,_helen_520前辈的文章。
好了话不多说,我也是为了巩固今日所学,希望能够提升自己也能帮助到想要学习opencv的各位。
OpenCV的全称是:Open Source Computer Vision Library
OpenCV是Intel开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。开源自然是其优点之一,但是OpenCV是基于c语言开发的,开发周期长,编程复杂。不过我们只需要知道openCV是计算机视觉库就可以了,简单是来说就是计算机图像处理。广泛应用于物体识别,图像分割,人脸识别等领域。
opencv源码下载官网:https://opencv.org/
CMake下载官网:https://cmake.org/
cmake 安装步骤如下
勾选中间的选项让程序自己配置环境变量,下面的桌面图标自己选择。
接下来的安装基本就是next,安装完成后cmd 输入cmake 出现以下内容表示成功
相应的vs版本:这里我以vs2019为例,各位也可以去找新版本或者旧版本
https://learn.microsoft.com/en-us/visualstudio/releases/2019/release-notes 这是老版本vs连接
解压各位下好的opencv压缩包,我下载的是opencv-4.7.0.zip,配置过程大同小异。解压之后文件夹里还有三个压缩包,也需要全部解压。
cmake构建源码生成的结果需要输出到指定文件夹中方便我们使用。所以为了方便,直接在opencv-4.7.0目录中创建一个build文件夹,文件名可以自己取。
1 打开下载好的cmake-gui(应该在C:\CMake\bin目录下,根据个人路径寻找,也可以在下载的时候勾选桌面图标)
以下就是内容填充,分别是解压的源码目录和自己新建的输出目录
2 点击下方configure 进行配置,可以选择自己的vs版本,但是要注意版本匹配问题。,这里我是4.7.0 选择VS019版本,具体版本信息可以上网查查一下。
(153条消息) OpenCV与VS的版本对应关系_opencv对应vs版本_David_djw的博客-CSDN博客
静等构建,可能需要两三分钟,也可能是五六分钟。
3 如果各位按步骤做,大概率会有以下的问题,不过都是正常的。
我想各位大概率应该和我一样会出现库文件缺失的问题
这是个莫名其妙的问题,明明是从官网下载的opencv源码,在源文件中也能找到对应的库文件,为什么不能构建成功呢。不说了,理不清,直接解决吧。
打开各位的build 输出文件夹,在里面可以查看下载日志。
打开查看日志信息。找到里面所有的do_copy字样的段落进行文件下载替换。
例如在上图中 缺失opencv_videoio_ffmpeg.dll 库文件,要到后面提到的官网进行下载,然后将下载好的库文件放到对应的文件夹中。这里要注意有的库文件能直接下载,有的是文本要另存为指定的文件名,也要注意后缀问题。可能大家发现对应的文件中有这些库文件,可是大家还是要替换掉,然后发现问题解决。还有更神奇的,多次点击configure发现 红色没了。。。不过这种方式大概率是不行的。还是需要到指定的地址去下载然后替换掉指定地址的文件。这里还是有个问题,就是我的笔记本连接wifi 到指定的网站下载文件就流量很慢,然后自己提示网络问题,下载失败了,开热点的话连网站都不显示。唉,难弄。
4 这里构建成功后,建议取消TEST 和CUDA 选项 勾选BUILD_opencv_world选项,这样会自动生成opencv_*world.lib,方便调试
5 添加 opencv_contrib的路径
6 继续configure 然后generate 最后在build路径下生成opencv.sln
1 找到 build 路径下生成的 opencv.sln 打开
2 在DeBug模式下依次点击生成->解决方案 ,这个过程大概需要5-10分钟,甚至更久。
3 找到右侧的项目中的CMakeTargets 右击INSTALL然后点击生成,
build\install\x64\vc16\bin 存放的是dll库文件
build\install\x64\vc16\lib 存放的是lib库文件
build\install\include 存放所有OpenCV2图像处理头文件
其实install文件中的所有库文件都在build文件的夹里分散开存放,而install文件就是将所有零散的库文件收集起来存在一起方便使用。比如DeBug模式下生成的dll文件存放在build/bin/DeBug目录下,相对的 Release模式下的生成的库文件在build/bin/Release目录下。二者之间的区别就是Debug生成的文件在后缀名之前多一个字母d。并且Debug模式是开发者调试模式,Release是在用户的角度进行调试。前者调试过程更慢写,内容更多。具体可以上网查询。
4 换成Release模式重复上述步骤。
上图是编译成功的显示界面。
总体来说VS使用opencv有三种方式。
第一种是将本地路径下的opencv引入到项目中。
第二种是将在VS项目中创建opencv文件夹,将需要的库文件放到VS中
第三种方式是命令行的方式,本文不讲这种方式,感兴趣的同志可以去网上查阅
以下两个小节讲解这两种方法
1 右击项目找到属性
2 VC++目录->包含目录->编辑
3 把头文件位置 告诉VS工程
上图需要注意的是有的opencv版本有多个头文件文件夹,都需要加入父子级目录
例如 opencv\include
opencv\include\opencv
opencv\include\opencv2
4 加入库文件目录,这里的目录根据自己的opencv lib目录而定
5 添加依赖项
这里的依赖项是依据模式而定,如果是Debug模式就需要将lib库里的 ***d.lib加入进去,如果是Release模式就需要将**.lib加入进去。尽量避免两种lib全部加进去,很有可能会出现link错误。
可能有同志会问为什么我明明告诉了项目库的地址,为什么还要加入依赖。这个我也不是很清楚,但是我知道,如果没有依赖项就会导致LINK1104或者其他LINK编译错误。明显是没有链接依赖项导致的。
配置完以上内容,opencv就可以工作了。
1 首先创建一个新的工程,然后在工程文件夹下新建一个文件叫叫opencv,并在这个文件夹中创建bin文件夹和lib文件夹。
2 将之前源码编译过程中的build/install的include 复制到opencv文件夹下,再将build\install\x64\vc16\bin的所有的文件复制到opencv/bin目录下,将build\install\x64\vc16\lib所有的文件放到opencv/lib目录下。
3 接着按照第一种方式添加头文件,库和依赖,只不过位置变成了相对地址。
将环境改为项目本地 编辑内容为PATH=..\opencv\bin ,这一步我看其他前辈做了,但是我没做也能成功。要注意两点,第一点路径为反斜杠,下图中的是错误的写法。第二点,如果这一步配置了出错了,那么就需要新建项目并且不做这一步。直接做下一步。
然后配置头文件和库 都是 ..\opencv 开头的(最好是放在在项目上一级目录,如果不知道项目在哪,可以在VS中右击项目找到下方的在文件资源管理器器中打开,退回上一级,粘贴opencv) 也就是本项目中的opencv路径下,这里的路径也需要是反斜杠。
链接器中输入的内容与第一种方式相同,这里我再次强调,一定要看编译的时候是X86还是X64。
这理我选择边缘检测作为项目练习,其他的腐蚀效果,阴影效果啥的都可以。
- #include <opencv2/opencv.hpp>
- #include<opencv2/highgui/highgui.hpp> //highgui模块头文件
- #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件
- using namespace cv;
- int main()
- {
- Mat srcImage = imread("1.jpg"); //读取原图,并将原图信息存放在变量中
- imshow("【边缘检测原图】", srcImage);//在控制台上显示原图
-
- Mat edge, grayImage; //声明两个变量分别进行 边缘检测处理 和 灰度处理
-
- cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);//尤其是第三个参数,不懂别改
-
- blur(grayImage, edge, Size(3, 3)); //进行图像内核降噪,就是提高视觉效果
- Canny(edge, edge, 3, 9, 3); //进行边缘检测操作
-
- imshow("【边缘检测效果图】", edge);
- waitKey(0);//毫秒级时钟函数,参数为0就是等待任意键结束
- destroyAllWindows(); //这个函数是关闭所有的窗口,如果没有这个操作会出现程序异常
- return 0;
- }
以下是成果图
1 第一个问题就是Cmake的时候出现的一片红,各位千万要按照CMakeDownloadLog.txt中的解决方案到指定的网站下载再放到指定的文件夹中,虽然源文件中有,但是肯定是内容不全的。也不要多次configure ,虽然会rag红框消失,但是问题就是问题,并没有解决。
2 注意运行自己新建的项目的时候是X86 还是X64,我们下的opencv版本都是针对特定的windows和VS版本的,如果没注意,可能导致明明告诉了项目头文件的地址,可是它就是找不到,这个问题让我找了几个小时。还有同志可能会问为什么不设置一个系统环境变量,将opencv的bin文件放到环境变量中,我也想啊,可是我放进去不生效,我也不知道为什么,下面就是我的环境变量配置,也希望同志们能帮助我找到问题所在。
3 0x00007FFCC57949B9 处(位于 test.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 。 没错上面一整句话是一个问题。这个问题出现在函数的参数不对。有可能我们的编译器在我们编写代码的时候给我们提示,我们抱着尝试的心理或者没注意就使用了那些宏,而导致我们的程序出错,很简单,出现此类问题,什么内存问题,基本都是代码有问题,对于自己陌生的参数多找找问题所在。
4 error LINK 1104 : 出现这个问题大概率就是依赖项没写对,检查检查。
5 VS编译的时候出现找不到dll,无法执行代码的情况,如下图所示
解决方案一:
这种情况是没有配置环境变量导致的。网上下载的opencv源码 经过VS生成解决方案和右击INSTALL点击生成后的 bin目录 应该在 G:\opencv4.7\opencv-4.7.0\build\install\x64\vc16\bin(举例)
这种目录上。当然你也可以复制出来 到一个新的opencv路径上 将bin目录的绝对路径添加在环境变量Path中即可解决问题。
解决方案二: 与配置环境变量的方法类似,直接将对应的dll文件复制到C:\Windows\System32目录下,因为这个目录是在环境变量里的,添加到这个目录跟第一种方法结果相同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。