文章用来复习之前做过的CV项目.是本科时候的毕业设计
包括了使用c++下的OpenCV编写图像处理和机器学习的图像识别引擎
和用ASP.NET进行网页平台开发调用上述引擎这两个过程.
从头开始全过程详细记录,包括环境的搭建和系统框架建立等内容,以供日后参考复习.
(选择2017的原因是与ASP.NET使用同一编译器防止版本混乱加懒得装第二个vs,也同样限定了OpenCV的版本)
C++下的OpenCV环境搭建
本文主要包含以下内容:
- 下载安装VS2017并安装相关组件,配置C++环境
- 下载安装OpenCV并配置环境变量和项目
- 使用OpenCV进行简单的图像处理
一.下载安装VS2017并安装相关组件,配置C++环境
安装免费的vs 社区版就行
下载VS2017后需要安装以下组件:
以上组件包含了该项目所用到的语言和框架.
安装组件后开始配置环境变量:
首先完成C++的环境变量配置:
首先找到Visual Studio 2017 的实际文件位置,如下图所示:
复制该文件位置:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86
(根据你自己文件安装位置进行更改)
然后在Path中添加该位置
Path编辑方法:
我的电脑->属性->环境变量->高级系统设置->打开Path,在系统变量中选中Path新建,并输入之前的文件位置
新建Lib变量,添加三个路径:
变量名:LIB
变量值:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x86;
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86;
(第一个根据你自己文件安装位置进行更改)
新建INCLUDE变量,添加两个路径:
变量名:INCLUDE
变量值:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;
进入C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build文件夹下,双击运行vcvarsall.bat文件。
最后Win+R->cmd打开命令行,输入CL
显示如下图即为C++配置成功
二.下载安装OpenCV并配置环境变量和项目
OpenCV下载地址:https://opencv.org/releases/
VS版本要与VC版本进行对应:
Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vc15
opencv对VC版本的支持情况:
opencv 2.4.10 == vc10、vc11、vc12
opencv 2.4.13 == vc14
opencv 3.4.x == vc14、vc15
opencv 4.x.x == vc14、vc15
我们选择opencv 3.4.x 版本进行安装
安装后记住安装位置,然后进入环境变量,找到PATH变量,进行编辑,将上一步opencv解压缩后的位置添加进去,文件具体位置如下:
“C:\Users\SteelTao\Desktop\OpenCV\opencv\build\x64\vc15\bin”
完成环境配置后接下来进行c++工程中的opencv配置
打开VS2017 在新建项目选择C++空项目
右键单击解决方案资源管理器内的解决方案“Image1(自己起的项目名称)”,再点击最下面的属性,进行配置。
在VC++目录下分别进行可执行文件目录、库目录和包含目录的配置
首先是可执行文件目录:
可执行文件目录:C:\Users\SteelTao\Desktop\OpenCV\opencv\build\x64\vc15\bin
包含目录:C:\Users\SteelTao\Desktop\OpenCV\opencv\build\include
C:\Users\SteelTao\Desktop\OpenCV\opencv\build\include\opencv
C:\Users\SteelTao\Desktop\OpenCV\opencv\build\include\opencv2
库目录: C:\Users\SteelTao\Desktop\OpenCV\opencv\build\x64\vc14\lib
C:\Users\SteelTao\Desktop\OpenCV\opencv\build\x64\vc15\lib
然后在“链接器-常规”里面选择“启用增量链接:否”;再往附加库目录中增加一下内容:
附加库目录:C:\Users\SteelTao\Desktop\OpenCV\opencv\build\x64\vc14\lib
%(AdditionalLibraryDependencies)
接着是“链接器-输入”中第一个选项“附加依赖项”加入以下内容:
附加依赖项:opencv_world3415.lib
opencv_world3415d.lib
注:opencv_worldxxxd.lib这个文件可在“\OpenCV\build\x64\vc15\bin”下查看,可以看到opencv_worldxxxd.dll,就是这个动态链接库,需要根据自己的OpenCV版本将后面的版本号改一下。另外Debug模式的只添加带d的那个.lib文件,相应的Release模式下只添加那个不带d的.lib文件
至此完成工程包含目录配置。
(2024.1.17更新:如果之后需要生成exe可执行文件,以上步骤中的可执行文件目录、库目录和包含目录的配置要分别在debug模式和release模式下配置一遍,附加依赖项同样)
三.使用OpenCV进行简单的图像处理
完成工程包含目录配置后。进行简单的图像测试,
代码如下,读取位于C:\Users\SteelTao\Desktop\OpenCV文件夹的图片test.jpg
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat img;
// 读取图像
img = imread("C:\\Users\\SteelTao\\Desktop\\OpenCV\\test.jpg", 1); // 1-RGB、0-gray
// 创建一个名为 "beautiful"窗口
namedWindow("beautiful", CV_WINDOW_NORMAL);
// 在窗口中显示“beautiful”窗口
imshow("beautiful", img);
// 等待6000 ms后窗口自动关闭
waitKey(6000);
// destroyAllWindows();
// destroyWindow("beautiful");
return 0;
}
如图所示, OpenCV配置成功,能够正常读取图片.
对图像进行简单的处理测试,分别将彩色图像转换为灰度图和旋转90度
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat inputImage = imread("C:\\Users\\SteelTao\\Desktop\\OpenCV\\test.jpg");
// 检查图像是否成功读取
if (inputImage.empty()) {
cout << "Error: Could not read the image." << endl;
return -1;
}
// 显示原始图像
imshow("Original Image", inputImage);
waitKey(0);
// 转换为灰度图像
Mat grayImage;
cvtColor(inputImage, grayImage, COLOR_BGR2GRAY);
// 显示灰度图像
imshow("Grayscale Image", grayImage);
waitKey(0);
// 旋转90度
Mat rotatedImage;
transpose(grayImage, rotatedImage);
flip(rotatedImage, rotatedImage, 1);
// 显示旋转后的图像
imshow("Rotated Image", rotatedImage);
waitKey(0);
// 保存结果
//imwrite("path/to/your/output/gray_and_rotated_image.jpg", rotatedImage);
return 0;
}