OpenCV学习笔记(1):入门、傅里叶变换与亮度对比度调整
记录一下学习《OpenCV3编程入门》的过程。由于有图像处理的基础,感觉很多内容都很亲切。
这几天学习的总结
- OpenCV在VS下的配置,OpenCV头文件的引用关系(第一章)
- OpenCV基础的操作(感受到变量是怎样在函数中传递的)(第一章)
- OpenCV的常用函数(第三章)
- Mat矩阵变量的初始化和输出(第四章)
- 一些C++相关的基础知识(第二章)
printf()
格式输出函数- 一些变量的命名规范
- 通过宏来定义的常量,通常所有字母集体大写
- 图像混合、亮度与对比度调整、傅里叶变换(第五章)(顺带复习了第四章的基础函数,
Rect()
、Scalar()
、Szie()
等) - 窗口程序相关:滑动条的创建(第三章与第五章)
《OpenCV3编程入门》这本书一个特点就是前后知识会有相关和重合,这样学起来感觉不错。
傅里叶变换
有个之前接触过,但没有亲自操作过的概念,对数尺度缩放。
单纯对二维图像进行傅里叶变换,变换结果通常不容易观察,明亮的高频区域过小。为便于观察,可以进行对数缩放。
对数缩放在大二的课上没有讲过,但我在一个小工具里用过,比直接变换“美观”很多。
先回忆一下大二课堂上用matlab做过的傅里叶变换。
1 |
|
再重温一下用OpenCV在C++中的实现。
1 |
|
在一开始,把交换坐标象限的代码写成了这个样子
1 |
|
这样的结果为
1 |
|
亮度对比度调整
亮度、对比度调整在PS中倒是经常用,但是在之前写代码的时候,也就是调一下亮度,为了让边缘检测适应亮场、暗场。
作为点操作(仅通过输入图像的像素值便可计算相应输出图像的像素值),亮度和对比度之所以成对出现,因为可以写在同一个变换公式中
$$g(i,j) = a*(i,j) + b$$
其中,a
用来控制对比度,b
用来控制亮度。
具体代码如下
1 |
|
结语
OpenCV与VapourSynth比较,虽然VapourSynth为处理视频提供了(面向视频的)高级API,但毕竟没有像OpenCV那样提供丰富的“半成品”函数,像扩充图像边界这样的操作要自己去写,反而体验到一些偏“底层”的东西。
顺带一提,刚刚会用了VS的“转到定义”功能,确实好方便。