title:OpenCV
time:2019年9月7日09:46:56
OpenCV基础1:
介绍
- 是计算机视觉开源库,主要算法设计图像处理和机器学习相关方法。
- 在多数图像相关的应用程序中被采用个,BSD许可,可以免费应用在商业和研究领域
- 目前SDK支持语言:Java、Python、IOS和Android
- 其他Matlab、Halcon
配置
-
添加系统变量path:D:\Microsoft\opencv\build\x64\vc15\bin
-
把opencv\build\x64\vc15\bin中几个应用程序扩展全都放进window/sysWOW64和system32中
-
项目属性管理器中x64中右键
-
vc++目录中包含目录
- D:\Microsoft\opencv\build\include\opencv2
- D:\Microsoft\opencv\build\include
-
库目录
- D:\Microsoft\opencv\build\x64\vc15\lib
-
链接器中
- opencv_world411d.lib
番茄工具的使用
加载、修改、保存图像
-
加载图像(cv::imread)
-
加载图像文件成为一个Mat对象,
-
第一个参数是图像文件名称
-
表示加载的图像是什么类型,支持常见的三个参数值
- IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变
- IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来
- IMREAD_COLOR(>O)表示把原图作为RGB图像加载进来
-
注意:支持JPG、PNG、TIFF等常见格式图像文件加载
-
-
显示图像(cv::namedWindos与cv::inshow)
- namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需销毁
- namedWindow(“WindowTItle”,WINDOW_AUTOSIZE)
- WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小
- WINDOW_NORMAL,跟QT集成的时候会使用,允许修改窗口大小。
- imshow根据窗口名称显示图像到指定的窗口上去
- 第一个参数是窗口名称
- 第二个参数是Mat对象
-
修改图像(cv::cvtColor)
- cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间
- 参数1:表示原图像(MAT)
- 参数2:表示新图像(MAT)
- 参数3:表示目标色彩空间如:COLOR_BGR2GRAY ,CORLOR_BGR2HLS
-
保存图像(cv::imwrite)
- 保存图像文件到指定目录路径
- 参数1:路径(1.png就是png的色彩空间,1.tiff表示其他,根据需要自己定)
- 参数2:图片(MAT)
- 只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存
- 保存PNG的时候可以保存透明通道的图片
- 可以指定压缩参数
- 保存图像文件到指定目录路径
-
waitKey(0)
- 窗口的保留时间,如不设置,会秒退
矩阵的掩膜操作
-
像素范围处理saturate_cast
- saturate_cast(-100),返回0
- saturate_cast(288),返回1
- saturate_cast(100)返回100
- 这个函数的功能是确保RGB值的范围在0~255之间
-
对比度增加
-
这个公式的意思就是如果你选中 的这个中心点比周围的暗,那就让它更暗,如果比周围的亮,那就让它更亮,当你把这个操作扩展到整个图像之后,图像之间的亮暗差距会变得更大,也就是对比度会更大row=1 而不是0,因为一个图像的边缘点没有四周进行对比,不能使用公式,所以循环从1开始,去掉了最外圈像素没有办法进行比较的点
-
int cols = (src.cols-1) * src.channels(); int offsetx = src.channels(); int rows = src.rows; dst = Mat::zeros(src.size(), src.type()); for (int row = 1; row < (rows - 1); row++) { const uchar* previous = src.ptr<uchar>(row - 1); const uchar* current = src.ptr<uchar>(row); const uchar* next = src.ptr<uchar>(row + 1); uchar* output = dst.ptr<uchar>(row); for (int col = offsetx; col < cols; col++) { output[col] = saturate_cast<uchar>(5 * current[col] - (current[col- offsetx] + current[col+ offsetx] + previous[col] + next[col])); } }
-
-
而OpenC