设置首页收藏本站
开启左侧

[OpenCV] OpenCV图像处理系列:OpenCV安装(二)

[复制链接]
Criss 发表于 2023-7-24 20:00:40 | 显示全部楼层 |阅读模式

一、下载软件
获取最新OpenCV发行版:https://github.com/opencv/opencv/releases
这里我们下载最新的4.8.0:https://github.com/opencv/opencv ... v-4.8.0-windows.exe
本站下载:https://www.51halcon.com/forum.php?mod=viewthread&tid=6331

简单说下版本变更日志:
1.DNN模块补丁:
TFLite 模型支持,包括 int8 量化模型,支持更多的模型;改进了卷积在部分设备上的速度;
支持 ONNX 分割、切片、剪辑 (Relu6) 和带有 auto_pad 的 Conv;
现代 OpenVINO 支持;
2.G-API模块:
简化 OpenVINO 推理引擎(即 API 1.0 后端)中的预处理;
引入了全新的 OpenVINO API 2.0 后端;
更新了 G-API ONNX RT 后端以支持 ONNX RT 版本 1.14.1;
Python 绑定中 ONNX RT 后端的公开版本规范化选项;

3.对象检测模块:
FaceDetectorYN 升级以获得更好的性能、准确性和面部标志支持;
基于 ArUco 代码的新 QR 代码检测算法;
条形码检测器和解码器从 Contrib 移至主存储库;
为所有图形代码(如条形码和 QR 码)引入了通用 API;
QR 码检测和解码管道中的多个错误修复和改进;

更多log参考:https://github.com/opencv/opencv/wiki/ChangeLog#version480

二、安装软件
可以直接拉取最新文件(尚未发布的托管代码),需要自行使用cmake编译,这里我们先省去编译环节(后续再讲),使用已经打包好的版本安装使用。

双击上面刚刚下载的安装包“opencv-4.8.0-windows.exe”(7z自解压文件),解压到比如我这里的“D:\OpenCV\OpenCV4.8.0”目录下即可。
然后看看编译好的dll文件:D:\OpenCV\OpenCV4.8.0\opencv\build\x64\vc16\bin
微信截图_20230724150657.png
这里核心文件打包成了一个opencv_world480.dll和opencv_world480d.dll(调试版),如果你觉得引用麻烦就可以直接用这一个文件即可。
大部分时候,我们可能需要单独打包,再单独引用,这样的话文件数目很多,但是灵活性更高点,适合高阶用户使用。
这里,说明下VC16是VS2019的版本,VC17是VS2022的版本,同时也适用于vs2019以上的版本。

接下来为了后续程序直接可以运行,无需拷贝相关dll,我们可以把路径做到运行时中:
这里不管是系统的还是用户的都可以,随便选择一个即可,我这里添加到用户的运行时:

新建用户变量:
微信截图_20230724151119.png

并添加到用户运行时:
微信截图_20230724151423.png
配置大功告成,这步的目的是无需拷贝dll到每个工程下,直接全局引用。

三、配置VS环境
这里我们安装VS2022 C++来进行验证环境,创建新项目,选择“语言”为C++,平台为“Windows”,项目类型为“控制台”,然后选中“控制台应用”,项目名称自定义,位置自定义,然后点击“创建”即可。
然后进入工程后,名称上右键,打开属性,找到“VC++目录”设置如下:
微信截图_20230724195801.png
然后进入”链接器“->”输入“,附加依赖项,添加引用的符号库(导入库):
微信截图_20230724195826.png
编译没有任何错误即可。

四、验证安装结果
测试代码:
  1. #include <iostream>
  2. #include <opencv2/opencv.hpp>

  3. int main()
  4. {
  5.     cv::Mat img = cv::imread("E:\\lena.jpg");
  6.     cv::namedWindow("lena", cv::WINDOW_FREERATIO);
  7.     cv::imshow("lena", img);
  8.     cv::waitKey();
  9.     cv::destroyAllWindows();
  10. }
复制代码
需要注意的是,末尾的"cv::waitKey();"必须加上,否则程序直接执行结束,你是看不到窗口的。以上代码在VS2022企业版17.6.5版本测试通过。
也可以提取出命名空间,声明后直接使用函数,无需每个函数前面加上cv::作用域了。
  1. #include <iostream>
  2. #include <opencv2/opencv.hpp>
  3. using namespace cv;

  4. int main()
  5. {
  6.     Mat img = imread("E:\\lena.jpg");
  7.     namedWindow("lena", WINDOW_FREERATIO);
  8.     imshow("lena", img);
  9.     waitKey();
  10.     destroyAllWindows();
  11. }
复制代码

最后的效果如下:
微信截图_20230724200933.png
加载的图片下载位置:https://www.51halcon.com/forum.php?mod=viewthread&tid=4631

1.imread(图像路径,读取模式)  //以模式读取指定路径下的图像
读取模式定义:
  1. enum ImreadModes {
  2.        IMREAD_UNCHANGED            = -1, //按原样返回加载的图像(带有alpha通道,否则会被裁剪),忽略EXIF方向
  3.        IMREAD_GRAYSCALE            = 0,  //转换图像到单通道的灰度图
  4.        IMREAD_COLOR                = 1,  //(默认)将图像转换为3通道BGR彩色图像
  5.        IMREAD_ANYDEPTH             = 2,  //当输入具有相应深度时,返回16位/32位图像,否则将其转换为8位
  6.        IMREAD_ANYCOLOR             = 4,  //图像以任何可能的颜色格式读取
  7.        IMREAD_LOAD_GDAL            = 8,  //使用GDAL驱动程序加载图像
  8.        IMREAD_REDUCED_GRAYSCALE_2  = 16, //将图像转换为单通道灰度图像,图像尺寸缩小1/2
  9.        IMREAD_REDUCED_COLOR_2      = 17, //将图像转换为3通道BGR彩色图像,图像尺寸缩小1/2
  10.        IMREAD_REDUCED_GRAYSCALE_4  = 32, //将图像转换为单通道灰度图像,图像尺寸缩小1/4
  11.        IMREAD_REDUCED_COLOR_4      = 33, //将图像转换为3通道BGR彩色图像,图像尺寸缩小1/4
  12.        IMREAD_REDUCED_GRAYSCALE_8  = 64, //将图像转换为单通道灰度图像,图像尺寸缩小1/8
  13.        IMREAD_REDUCED_COLOR_8      = 65, //将图像转换为3通道BGR彩色图像,图像尺寸缩小1/8
  14.        IMREAD_IGNORE_ORIENTATION   = 128 //不根据EXIF的方向标志旋转图像
  15.      };
复制代码

2.namedWindow(窗口名称,窗口模式)
窗口模式定义:
  1. enum WindowFlags {
  2.        WINDOW_NORMAL     = 0x00000000, //用户可以调整窗口大小(没有限制),也可以将全屏窗口切换到正常大小
  3.        WINDOW_AUTOSIZE   = 0x00000001, //(默认)用户不能调整窗口大小,大小受显示图像的限制
  4.        WINDOW_OPENGL     = 0x00001000, //支持OpenGL的窗口
  5.        WINDOW_FULLSCREEN = 1,          //将窗口改为全屏
  6.        WINDOW_FREERATIO  = 0x00000100, //图像尽可能扩大(无比例限制)
  7.        WINDOW_KEEPRATIO  = 0x00000000, //遵循图像的比例
  8.        WINDOW_GUI_EXPANDED=0x00000000, //状态栏和工具栏
  9.        WINDOW_GUI_NORMAL = 0x00000010, //旧时尚的方式
  10.     };
复制代码

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
KingLong110 发表于 2023-7-26 09:25:56 | 显示全部楼层
非常详细,感谢分享!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Yaowenxue 发表于 2023-7-26 09:41:05 | 显示全部楼层
正好学上,非常感谢
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
EdwardHenry 发表于 2023-8-10 20:57:26 | 显示全部楼层
谢谢楼主分享
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
zwsj 发表于 2023-8-10 22:38:47 | 显示全部楼层
谢谢楼主分享
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Yanlf 发表于 2023-8-11 07:55:55 | 显示全部楼层
谢谢楼主分享
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
zby1983 发表于 2023-8-30 16:38:52 | 显示全部楼层
感谢分享
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
yang_e 发表于 2023-9-26 13:25:15 | 显示全部楼层
{:1_6:}{:1_6:}{:1_6:}{:1_6:}{:1_6:}{:1_6:}{:1_6:}
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
笔尖下的梦 发表于 2023-9-26 17:44:01 | 显示全部楼层
期待后续的编译过程
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表