OpenCV 算法框架
一、基础操作
1. 数据类型 数据结构了解
图像相关:cvArr cvMat IplImage
数据数组的维数, 与数据的通道数 见P46 (76)
2. 常见的矩阵操作熟悉
3. 数据的保存和读取
4. 图像的加载和显示
5. 视频的操作
6. 内存与序列
a. 内存存储器
CvMemStorage双向链表 动态对象(cvSeq cvSet)的内存
cvCreateMemStorage
cvReleaseMemStorage
cvClearMemStorage 不返还系统
cvMemStorageAlloc
b. 序列
是内存存储器可以存储的一种对象。 双端队列
CvSeq
方法:
cvCreateSeq
cvClearSeq
cvGetSeqElem
cvCloneSeq cvSeqSlice cvSeqRemoveSlice cvSeqInsertSlice
cvSeqSort
cvSeqSearch
cvSeqInvert
cvSeqPartition
堆栈操作 cvSeqPush cvSeqPushFront cvSeqPop cvSeqPopFront cvSeqPushMulti cvSeqPopMulti
cvSeqInsert cvSeqRemove
cvSetSeqBlockSize
读出和写入: CvSeqWriter结构 cvStartWriteSeq cvStartAppendToSeq cvEndWriteSeq cvFlushSeqWriter
CV_WRITE_SEQ_ELEM CV_WRITE_SEQ_ELEM_VAR
CvSeqReader结构 cvStartReadSeq cvGetSeqReaderPos cvSetSeqReaderPos
CV_NEXT_SEQ_ELEM V_PREV_SEQ_ELEM CV_READ_SEQ_ELEM CV_REV_READ_SEQ_ELEM
数组互相转换 cvCvtSeqToArray cvMakeSeqHeaderForArray
二. 图像的处理
1. 图像的平滑 cvSmooth
主要应用: 去除噪声, 失真,降低图像的分辨率。
主要方法: CV_BLUR CV_BLUR_NO_SCALE CV_MEDIAN CV_GAUSSIAN CV_BILATERAL
2. 图像形态学 cvErode cvDilate cvMorphologyEx
主要作用: 消除噪声 分割等
相关方法
a. 腐蚀 消除噪声斑点
b. 膨胀 连通被噪声、阴影分割的区域
c. 开运算 先腐蚀后膨胀
d. 闭运算 先膨胀后腐蚀
e. 形态梯度
f. "礼貌"
g. "黑帽"
3. 漫水填充算法 cvFloodFill
作用: 标记或者分离图像的一部分。 从输入图像获取掩码区域。
原理: 把邻近区域所有相似点填充为种子点同样的颜色。
4. 尺寸调整 cvResize
ROI的影响
插值方法的选择
5. 图像金字塔 cvPyrDown cvPyrUp cvPyrSegmentation
简介:源于同一原始图像的连续降采样获得的一个图像的集合。
方法:高斯图像金字塔 拉普拉斯图像金字塔
应用:图像分割
6. 阀值化 cvThreshold cvAdaptiveThreshold
一般阀值化
自适应阀值化: 针对有很强照明或反射梯度的图像,需要根据梯度进行阀值化
三、图像的变换
1. 卷积 cvFilter2D
数学公式: z(t)=f(t)*g(t)= ∫f(m)g(t-m)dm
h(x)=(f*g)(x)
描述:变换的基础
卷积核: 参考点 核支撑
计算方法:图像参考点 = Σ 核点*对应图像点
卷积边界: cvCopyMakeBorder
2. 梯度和Sobel导数 cvSobel
导数的计算:最重要且是最基本的卷积
注意: Sobel导数并不是真正的导数,它是离散空间的拟合。
用大核可以对导数有更好的逼近。
scharr滤波器: sobel算子小核时精度低,应使用scharr滤波器。
3. 拉普拉斯变换 cvLaplace
描述: 二阶导数 二阶Sobel导数
应用: 检测"团块" 边缘检测
4. Canny算子 cvCanny
描述: 轮廓拼装
应用: 边缘检测
5. 霍夫变换
应用: 在图像中寻找直线、圆等其他简单图形的方法。
霍夫线变换 cvHoughLines2霍夫圆变换 (霍夫梯度法) cvHoughCircles
6. 重映射 cvRemap
7.