赞
踩
首先下载库文件,如下图所示,进入OpenCV 官网,选择Library->Releases,进入Release库文件包下载页面。
选择Windows系统的文件下载,点击选择之后会自动开始下载。
本案例选择OpenCV-4.8.0版本,下载的文件名为opencv-4.8.0-windows.exe,双击该文件解压
也可以右键选择文件,“解压到当前文件夹”,会在当前路径下解压得到文件夹opencv,其中包含两个子文件夹:
--build,存放编译的二进制库文件;
--sources,存放当前版本的源码。
进入build文件夹,路径下有六个文件夹:
--bin,存放第三方库依赖文件;
--etc,存放资源文件;
--include,存放头文件;
--java,存放Windows系统Java库文件;
--python,存放Windows系统Python语言安装文件;
--x64存放Windows C++库文件,vc16两个版本。
对于Visual Studio 2022,可以选用最新版本的vc16编译器对应的库文件,vc16路径下包含两个文件夹:bin(存放动态库文件)和lib(存放静态库文件),OpenCV工具库调用最重要的三个文件为:头文件(存放于include文件夹)、动态库(opencv_world480.dll或者opencv_world480d.dll)以及静态库(opencv_world480.lib或者opencv_world480d.lib)。
选择打开Visual Studio 2022,创建新项目。创建项目可以直接选择创建“控制台应用”,创建的项目中有主程序,并默认输出“Hello World”。
配置新项目,设置项目名称和项目位置,解决方案名称可以使用默认的,和项目名称相同。
在项目中需要配置OpenCV库引用才能使用OpenCV,环境配置需要配置三个方面内容:包含目录,库目录和链接器依赖项。
在“链接器-输入-附加依赖项”中配置附加依赖项,即静态库文件名称。
选择“应用”和“确定”后即完成配置,编写测试代码测试OpenCV库的使用。
示列:读取一张图像,并将图像显示出来。
- // OpenCV_Demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
- //
-
- #include <iostream>
- #include "opencv2/opencv.hpp"
- using namespace cv;
-
- int main(int argc, char** argv)
- {
- // 检查命令行参数是否提供了图片路径。
-
-
- // 使用 imread() 函数读取图像。第二个参数是一个标志,代表图像应如何读取。
- Mat image;
- image = imread("E:\\images\\1.png", IMREAD_COLOR);
-
- // 检查图像是否正确读取。
- if (image.empty())
- {
- std::cout << "Could not open or find the image" << std::endl;
- return -1;
- }
-
- // 创建一个窗口用于显示图片。
- namedWindow("Display window", WINDOW_AUTOSIZE);
-
- // 将图像显示在创建的窗口中。
- imshow("Display window", image);
-
- // 等待用户关闭窗口。
- waitKey(0);
-
- return 0;
- }
-
- // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
- // 调试程序: F5 或调试 >“开始调试”菜单
-
- // 入门使用技巧:
- // 1. 使用解决方案资源管理器窗口添加/管理文件
- // 2. 使用团队资源管理器窗口连接到源代码管理
- // 3. 使用输出窗口查看生成输出和其他消息
- // 4. 使用错误列表窗口查看错误
- // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
- // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
编译没有出错,按下F5,运行项目。提示如下截图错误信息。
错误称为“运行时错误”,运行时错误的常见原因是动态库文件无法找到或者不匹配。这种问题的解决办法有如下两种:
解决办法:
第一种:(个人推荐使用) 将动态库路径配置到环境变量中。读者可以选择“计算机—>属性—>高级系统设置—>环境变量”,找到Path变量,将OpenCV文件包中的opencv/build/x64/vc16/bin路径配置到环境变量中,这样运行时就能找到动态库的路径。
第二种:将动态库拷贝到生成的可执行文件所在路径中。
上述两种办法是为了让可执行文件OpenCVdemo.exe能在搜索路径中找到OpenCV的动态库文件,当前路径和环境变量都是Windows系统中可执行文件链接时的搜索路径。
OpenCV的 core 模块是整个库的核心模块,它提供了大量的函数和类来支持图像处理、计算机视觉和机器学习等领域中的几乎所有操作。该模块的主要功能包括:
数组结构:core 模块中最重要的数据结构是Mat,它是一个多维数组,用于存储图像和其他数据。除此之外,它还定义了一些向量对象,如Point, Size和Rect等。
数学运算与矩阵处理:core 模块提供了大量的数学函数和线性代数工具,如矩阵运算、特征值分解、SVD分解、线性方程组求解等。
OpenCV的imgcodecs模块是一个用于加载和保存图像的模块,它提供了广泛的图像编解码器,包括JPEG、PNG、BMP、GIF、TIFF等格式。同时,它支持使用多种压缩方式存储和读取图像数据,比如无损压缩、区域压缩等。
OpenCV的 imgproc 模块是计算机视觉领域中最重要的模块之一,在图像处理方面提供了丰富的功能和强大的性能。该模块主要提供以下功能:
图像变换:包括缩放、旋转、仿射和透视变换等多种变换方式,同时也提供了极线约束变换函数。
图像滤波:提供了各种类型的图像滤波器,如高斯滤波器、中值滤波器、双边滤波器等,以及形态学滤波器,如腐蚀、膨胀、开运算和闭运算等,用于处理图像中的噪声和错误感知情况。
图像分割:包括阈值分割、自适应阈值分割、区域生长和分水岭分割等方法,常见应用领域是目标检测和识别。
形状分析:core模块通过重心、轮廓分析、凸包、图形逼近等技术,针对二维或三维对象进行特征分析方法,如检测图像中的圆、直线,测量物体大小、形状,等等。
OpenCV的 highgui 模块是专门用于窗口显示和事件处理的模块。该模块提供了一些可用于创建GUI界面,并与图像或视频进行交互的函数和工具。下面是highgui模块的主要功能:
窗口管理:提供了可以用来创建、命名、移动、重置和关闭窗口等函数。比较常见的窗口包括原始图像窗口、鼠标交互窗口、控制条窗口等。
鼠标和键盘事件响应:通过注册回调函数,用户可以快速定义在窗口中的鼠标点击和按键等事件。这种特性支持了交互式程序开发。
OpenCV 的 videoio 模块提供了一系列用于视频输入输出的类和函数,其主要功能包括:
视频捕获:该模块提供了 VideoCapture 类,它可以打开本地摄像头或者读取一个视频文件,并可以读取视频帧并进行处理。
码流压缩和解码:videoio 模块提供了 VideoWriter 和 VideoCapture 两个类,既可以进行视频帧编码为指定格式的编码器调用,同时也可以配合VideoCapture类进行视频帧解码。常见的视频编解码器包括MPEG, H.264, VP8/VP9等。
视频输出:可以通过 VideoWriter 类将视频存储到本地文件中,并采用相应编解码器传输,以替换简单的 FileStorage等接口方法。
OpenCV 的 video模块提供了视频分析功能,主要包含运动估计、背景分离、对象跟踪等视频处理相关内容。
OpenCV 的 photo模块提供了图像修复和图像去噪相关内容。
OpenCV 的 feature2d 模块是用于图像特征提取和描述的模块,提供了多种关键点检测和特征描述算法。
其中常见的关键点检测算法有 Harris 角点检测、Shi-Tomasi 角点检测、SIFT 关键点检测、SURF 关键点检测等;特征描述算法包括 SIFT 描述符、SURF 描述符、ORB 描述符等。
OpenCV 的 calib3d 模块是用于摄像机标定和三维重构的模块,提供了多种相机标定和姿态估计算法。
其中常见的摄像机标定算法有 Zhang's 方法、Tsai's 方法、OpenCV 自带的基于棋盘格和圆点的标定方法等,通过对标定板拍摄的多张图像进行处理,可以得到相机内参矩阵、畸变参数等信息。而姿态估计算法可以从相机拍摄的多个视角下获取对象的三维位置姿态信息,包括了 PnP(Perspective-n-Point)问题求解、立体匹配求解等。
除此之外,calib3d 模块中还提供了立体摄像头标定、双目匹配、三角化等功能,以及针孔相机模型转换为鱼眼相机模型的工具。
OpenCV 的 objdetect 模块是用于目标检测的模块,提供了多种目标检测算法和训练工具。
其中常见的目标检测算法有 Haar 特征分类器(Cascade Classifier)、HOG+SVM等。Haar 特征分类器是一种基于 Adaboost 算法的分类器,应用广泛且易于理解;而 HOG+SVM 是基于 Histogram of Oriented Gradients 和 SVM 的方法,可以在复杂背景下实现比较好的目标检测效果。
OpenCV 的 ml 模块是用于机器学习的模块,提供了多种经典的机器学习算法和流程,包括分类(Classification)、回归(Regression)、聚类(Clustering)、降维(Dimensionality Reduction)等任务。
其中常见的机器学习算法有 KNN、SVM、决策树(Decision Tree)、随机森林(Random Forest)等。这些算法通过对样本数据进行训练,得到一个模型,再利用该模型对新的输入数据进行预测或分类。
除了提供各种机器学习算法外,ml 模块还提供了特征选择(Feature Selection)、交叉验证(Cross-validation)等工具,可以帮助数据科学家更好地构建和评估机器学习模型。
OpenCV 的 dnn 模块是一个深度学习模块,提供了用于深度神经网络(DNN)的工具和算法,使用户可以使用训练好的神经网络模型来进行图像和视频分析。
dnn 模块支持各种常见的深度学习框架,如 Caffe、TensorFlow、MXNet 等,并提供了一些预训练的深度学习模型,例如 SSD、YOLO、MobileNet 和 ResNet 等。在 OpenCV 中,用户可以通过构建 DNN 模型并加载预训练权重文件来实现目标检测、人脸识别、语义分割等任务。
除了加载预训练模型以外,dnn 模块也提供了一些工具函数,例如 BlobFromImage 函数,可以将图像转换为神经网络输入的 blob 对象;还提供了一些优化算法,例如边界框回归和非极大值抑制(NMS)算法,以提高目标检测的准确性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。