![9c4a60a4dc2e586861e4b76ed8629edb.png](https://i-blog.csdnimg.cn/blog_migrate/e1119cf6799886a7b71fb39a972989db.jpeg)
简介
- OpenCV
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
- 示例代码说明
官网的页面虽然很土,但是示例代码还是很良心的:OpenCV Tutorials
![1aa7d7da4709f34ffd78e75a66a56240.png](https://i-blog.csdnimg.cn/blog_migrate/10b5379bf60cf740db7df33ccfc136ff.jpeg)
本文运行的代码全部取自于opencv官网,提供了代码和傻瓜式运行教程~,从下载VS2017,下载OpenCV到配置,运行。即使不懂c++,照样可以玩转OpenCV的hello world。
知乎编辑器效果有限,原文包括下载资源链接,请移步语雀:OpenCV—Hello world代码示例 · 语雀www.yuque.com
![32e8590f94db03823ebd4931a8ca4eda.png](https://i-blog.csdnimg.cn/blog_migrate/ce192a00459c91adbb1aded966286a58.jpeg)
主要的demo方法和简介如下:
//加载一张图片
int load_one_image(string path);
//加载一张图、并转化为灰图保持至outpath
int modify_and_save_one_image(string inpath, string outpath);
//介绍Mat - 基本图像容器
int mat_the_basic_image_container();
//改变图像对比度和亮度
int change_image_contrast_and_brightness(string path);
//利用OpenCV绘制基础图像(线段、圆、椭圆..)
int basic_drawing();
//线性滤波平滑处理图像
int smoothing_image(string path);
//侵蚀和膨胀处理图像
int erode_and_dilate_image(string path);
//更多形态学处理
int more_image_processing(string path);
//利用形态学处理提取图片中水平和垂直的线条
int extract_horizontal_and_vertical_lines_form_image(string path);
//图像金字塔(采样、缩放)
int image_pyramids(string path);
//基本阈值处理
int basic_thresholding_operations(string path);
//图像线性滤波器
int image_linear_filters(string path);
//给图像加上边框
int add_border_to_image(string path);
//霍夫圆变换(利用其检测图像中的圆)
int hough_circle_transform(string path);
//图像重映射(改变方向)
int image_remapping(string path);
//给图像中的轮廓画出椭圆和边框
int create_boxes_and_ellopses_for_contours(string path);
//失去焦点(模糊)图像恢复
int out_of_focus_image_recovery(int argc, string imagepath, char *argv[]);
运行环境
首先,只需要win10的环境,配上VS2017,再下载OpenCV3.x的压缩包即可。
VS2017
OpenCV3.X
示例图片下载 >>图片.rar(0.27 MB)
代码下载: >>代码.rar(18.66 kB)
效果展示
1.extract_horizontal_and_vertical_lines_form_image();
![b648bb42cdd03914fdac77d2a7f3e008.png](https://i-blog.csdnimg.cn/blog_migrate/c6189109005f7412615b244af0224b05.jpeg)
2.smoothing_image()
![9c1c2c45c8190d8d610a3fbf41fee152.png](https://i-blog.csdnimg.cn/blog_migrate/46558ad9216339944c9c525ae504b826.jpeg)
运行前准备
新建项目
- 打开VS,文件->新建项目
![f2a3be47ed9ae85bf5c9dfa9196ecc88.png](https://i-blog.csdnimg.cn/blog_migrate/35d6a0907b316eabb216666e4ba0662b.png)
选第一个即可。
![7fe7422599b7d77cfff6253460f31660.png](https://i-blog.csdnimg.cn/blog_migrate/610392887bb52d97181cee16baf8d09c.jpeg)
我的项目名称为opencv_demo,即项目根目录。
![589445b661c4c0b61c54242b7574d401.png](https://i-blog.csdnimg.cn/blog_migrate/20b07a3c2ec3d69e6e509c05604f8f94.png)
将解压后的opencv包,放到任意路径,我一般习惯放在项目同级目录下。进入项目文件夹,双击项目名称.sln即可再VS里启动项目,如图所示,可以准备一些图片放在这里,待会测试opencv会用到。
示例图片下载 >>图片.rar(0.27 MB)
![62f45fe7f4af64cfe5832814f66e90f1.png](https://i-blog.csdnimg.cn/blog_migrate/2ae8b9e90bdc4e5f5ada742628c71baf.png)
发现,还有个同名的opencv_demo文件夹,再点击进去,将代码压缩包里的代码一起解压出来
![68e3e43bb4e8e643087f039aa7ee6df8.png](https://i-blog.csdnimg.cn/blog_migrate/89e284e878f643d904d534222a6164e3.jpeg)
然后选中这些文件,将.h开头的拖至VS右侧【头文件】下,其余的拖至【源文件】下
![dee36fac4170e82dfc19593b6d96259a.png](https://i-blog.csdnimg.cn/blog_migrate/c13dde665bf5d6561190fce1cbf64e06.jpeg)
代码结构
代码压缩包里的代码分为两类:1.头文件 2.源文件
1.头文件即.h结尾的,此处即demohub.h,在这里定义了示例代码的方法名称、变量,类似Java种的接口
2.源文件,即核心的demo示例片段代码,一个.cpp对应一个Opencv的demo
源文件种opencv_demo.cpp是核心,在其中的main()方法种,调用demohub.h中定义的各种demo方法。
代码下载:代码.rar(18.66 kB)
![fe803fed4a11c3082a5be51d8b5fa970.png](https://i-blog.csdnimg.cn/blog_migrate/cd8664da83bc21e97dbfd6e07a55b91b.jpeg)
VS配置
- VC++目录配置
选择右侧,项目文件夹鼠标右键->属性,配置VC++目录中的【包含目录】和【库目录】
包含目录,要将opencv->build->include目录添加上去;库目录,即lib所在目录,这里需要opencv->build->x64->vc14->lib。
- 包含目录:
D:personalProjectAIimageProcessingopencvbuildinclude
- 库目录:
D:personalProjectAIimageProcessingopencvbuildx64vc14lib
![ac6a3e881d7d3bacc74ee35c34baa9fe.png](https://i-blog.csdnimg.cn/blog_migrate/406d7d4c256254eaac1c8d24efa9cc1a.jpeg)
- 链接器配置
附加依赖项,新增:opencv_world340.lib
![bcb45db8e84b3b3acb6a2e106cd84625.png](https://i-blog.csdnimg.cn/blog_migrate/2a2bf6b9403b62bc66020c554c26fb00.png)
运行demo
在opencv_demo.cpp的main函数中,我们可以调用任意之前在demohub.h中声名的方法,每个方法对应一个.cpp示例代码
![5c5a1397bbb49505514d5a076540226b.png](https://i-blog.csdnimg.cn/blog_migrate/4cb1d8ca99203922f4f92df1d9600e94.jpeg)
如上图所示:在main里运行smoothing_image(),这个demo方法的效果是:线性滤波平滑处理图像