课程链接:
https://www.bilibili.com/video/BV11A411T7rL/?spm_id_from=333.788
-
下载visual studio
-
github 下载 opencv :
Release->选择windows 的 .exe文件
配置环境变量: 本文将opencv放在了以下路径中:
G:github_coderepopencvbuildx64vc15bin
重启计算机
- 打开vs,创建c++ 工程: 并将plateform target 设置为 x64
-
工程配置
- vc++ 目录:
包含目录:G:github_coderepopencvbuildinclude
库目录:G:github_coderepopencvbuildx64vc15lib
- 链接器:
输入:附加依赖项 opencv_world455d.lib (版本号从
G:github_coderepopencvbuildx64vc15bin 可以看到)
VC++ directories:
- 点击工程名称 -> 项目 -> 属性
- 配置vc++ 的包含目录和库目录
- 配置链接器以及版本号查询
- 测试
#include#include #include #include using namespace cv; using namespace std; //Images int main() { string path = "Resources/test.jpg"; Mat img = imread(path);//由Opencv 引入的矩阵数据类型 imshow("Image", img); waitKey(0); // 0 :指等待事件无穷大(infinite),这样打开的图片就不会关闭 return 0; }
代码能够成功运行,显示图片,说明环境配置正确
chapter 1 读取图像、视频和摄像头对于图片:由opencv引入的矩阵类型 Mat 来进行读取
对于视频:是由一系列的图片组成的,需要使用while循环读取所有的img
对于摄像头:与读取视频的方式一致,区别在于路径获取 为摄像头的编号VideoCapture cap(0); 如果只有一个摄像头,通常设置为ID=0 ,如果有多个摄像头,注意修改ID的值
#include#include #include #include using namespace cv; using namespace std; //----------------------------------------------------------------------// //Images int main() { string path = "Resources/test.jpg"; Mat img = imread(path); //由Opencv 引入的矩阵数据类型 imshow("Image", img); waitKey(0); return 0; } //----------------------------------------------------------------------// //video int main() { string path = "Resources/test_video.mp4"; //视频的位置 //读取视频 VideoCapture cap(path); Mat img; //显示视频 while (true) { cap.read(img); imshow("Image", img); waitKey(20); //等待时间20ms } return 0; } //----------------------------------------------------------------------// //摄像头 int main() { //读取视频 VideoCapture cap(0); Mat img; //显示视频 while (true) { cap.read(img); imshow("Image", img); waitKey(1); //等待时间1ms } return 0; }
chapter 2 基本功能- 转换成灰度图 :
使用函数 cvtColor(src,dst,code_color,dstCn)
函数说明:将图片从一个色域转换成另一个色域。注意OpenCV的默认颜色格式是BGR而不是RGB。 code_color 可以从 ColorConversionCodes 中查看。dstCn:目标图片的通道数,如果为0,通道数自动从 src 和 code 派生
-
高斯模糊 : GaussianBlur(src,dst,Size(),x,y)
-
边缘检测:canny
-
腐蚀erode()膨胀dilate()
c++ 中没有 numpy,因此使用getStructuringElement为erode和dilate创建kernal
#includechapter 3 调整大小和裁剪 chapter4 绘制形状和文本#include #include #include using namespace cv; using namespace std; //Images int main() { string path = "Resources/test.jpg"; Mat img = imread(path); Mat dst_img, gauss_img, canny_img,dilate_img,erode_img; //颜色转换 cvtColor(img, dst_img, ColorConversionCodes::COLOR_BGR2GRAY); //高斯模糊 GaussianBlur(img, gauss_img, Size(7, 7), 3, 0); //边缘检测 canny Canny(gauss_img, canny_img, 50, 150);//threashold1,2 自己设定 ,可以使用拖拽栏来调节参数,从而设置这两个阈值,找到最佳检测 //腐蚀erode()和膨胀dilate() //c++ 中没有 numpy,因此使用如下方式创建kernal,为dilate() 使用 Mat kernal = getStructuringElement(MORPH_RECT, Size(3, 3)); //膨胀 dilate(canny_img, dilate_img, kernal); //腐蚀 erode(canny_img, erode_img, kernal); imshow("Image", erode_img); waitKey(0); return 0; }



