OPENCV是一个开源程序库,包含了 500 多个用于图像和视频分析的优化算法。
我们可以利用它进行图像处理,现在来创建一个简单的程序。
1.在官网上下载OPENCV
网址:https://opencv.org/
链接:link
点击这里来下载最新的版本。
2.安装OPENCV
解压生成 opencv 目录。
其中build是OpenCV使用时要用到的一些库文件。
3.配置环境变量
我的电脑—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑。
将OPENCV的目录添加上去。这里填写的OPENCV目录是D:\software\opencv\build\x64\vc14\bin。x64文件夹下分为vc14和vc15两个文件夹,我这里使用的VS2015,所以应该选择vc14目录下的bin文件夹。VS与VC详细对应关系见附1。
环境变量配置完毕之后,需要重启电脑才能生效!
4.创建项目
新建一个空项目
更改项目属性,链接器->系统->子系统设置为控制台。
添加一个源文件main.cpp,输入代码(附2)。
此时发现编译器会提示错误,这是因为我们没有将OPENCV的内容导入项目中。在项目属性下添加
包含目录D:\software\opencv\build\include
库目录D:\software\opencv\build\x64\vc14\lib
链接器的输入设置附加依赖项添加对应
D:\software\opencv\build\x64\vc14\lib的.lib文件,根据选择的Debug和Release模式进行添加。
这里opencv_world451.lib是Release模式版本,而opencv_world451d.lib是Debug模式版本:
5.运行程序
此时编译成功,程序无错误提示。
在项目下添加名为"test.bmp"的图片。
运行程序,先后弹出两张照片,第一张照片为"test.bmp"原图,第二张为处理过的图片(水平翻转)。
附1:VS版本与VC版本对应关系
VS | VC |
---|---|
Microsoft Visual Studio 6.0 | VC6.0 |
Microsoft Visual Studio .NET 2002 | VC7.0 |
Microsoft Visual Studio .NET 2003 | VC7.1 |
Microsoft Visual Studio 2005 | VC8.0 |
Microsoft Visual Studio 2008 | VC9.0 |
Microsoft Visual Studio 2010 | VC10.0 |
Microsoft Visual Studio 2012 | VC11.0 |
Microsoft Visual Studio 2013 | VC12.0 |
Microsoft Visual Studio 2015 | VC14.0 |
Microsoft Visual Studio 2017 | VC15.0 |
附2:代码
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
int main()
{
cv::Mat image; // 创建一个空图像
std::cout << "This image is " << image.rows << " x "
<< image.cols << std::endl;
image = cv::imread("test.bmp"); // 读取输入图像
if (image.empty()) { // 错误处理
// 未创建图像……
// 可能显示一个错误消息
// 并退出程序
std::cout << "no image!\n";
}
else
{
// 定义窗口(可选)
cv::namedWindow("Original Image");
// 显示图像
cv::imshow("Original Image", image);
cv::waitKey(0); // 0 表示永远地等待按键
// 键入的正数表示等待的毫秒数
cv::Mat result; // 创建另一个空的图像
cv::flip(image, result, 1); // 正数表示水平
// 0 表示垂直
// 负数表示水平和垂直
cv::namedWindow("Output Image"); // 输出窗口
cv::imshow("Output Image", result);
cv::waitKey(0); // 0 表示永远地等待按键
// 键入的正数表示等待的毫秒数
cv::imwrite("output.bmp", result); // 保存结果
}
system("pause");
return 0;
}