目录
说明
本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正,我会持续进行完善!示例代码为C++编写,仅供参考。注意,为节省篇幅,函数中省略了参数类型和返回值,实际使用时参考opencv的接口说明即可!因版本不同而出现的接口和参数差异问题,请以具体版本为准,作者使用的opencv版本为最新版。
导航
OpenCV4图像处理算子不完全手册-入门篇
OpenCV4图像处理算子不完全手册-应用篇
正文
三、图像直方图与模板匹配
1、直方图统计
calcHist(images, nimages, channels, mask, hist, dims, histSize, ranges, uniform, accumulate)
参数说明:
images 待统计直方图的图像数组
nimages 输入图像的数量
channels 需要统计的通道索引数组
mask 可选的操作掩码
hist 输出的统计直方图结果,是一个维度为dims的数组
dims 需要计算的直方图的维度,一般灰度图像为1
histSize 存放每个维度直方图的数组的尺寸,如0~255就是256个级别
ranges 每个图像通道中灰度值的取值范围,如0~255
uniform 直方图是否均匀的标志符,默认为true
accumulate 是否累积统计直方图的标志,主要用于多个图像统计多个图像整体的直方图
2、直方图操作
直方图归一化,灰度值的概率分布
normalize(src, dst, alpha, beta, norm_type, dtype, mask)
参数说明:
alpha 在范围归一化的情况下,归一化到下限边界的标准值
beta 归一化时的上限范围,不用于标准规范化
norm_type 归一化过程中数据范数的种类标志
dtype 输出数据类型的选择标志
直方图比较
compareHist(H1, H2, method)//比较H1和H2,method为比较的方法
3、直方图的应用
直方图均衡,提高对比度
equalizeHist(src, dst)
4、图像模板匹配
matchTemplate(image, temp, result, method, mask)
参数说明:
image 待匹配的图像,仅支持CV_8U和CV_32F类型
temp 用于匹配的模板图像
result 匹配结果的输出图像,数据类型为CV_32F
method 选择的匹配方法
//匹配结束后在result中寻找最值和对应的位置,根据模板的大小进行绘制
double maxVal, minVal;
Point minLoc, maxLoc;
minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);
//绘制最佳匹配区域,使用最大/最小值取决于使用的匹配方法标志
rectangle(img, cv::Rect(maxLoc.x, maxLoc.y, temp.cols, temp.rows), Scalar(0, 0, 255), 2);
四、图像滤波
1、线性滤波
均值滤波
blur(src, dst, ksize, anchor, borderType)
参数说明:
ksize 卷积核大小,即滤波器的尺寸大小,Size(w,h)
anchor 内核的基准点,即锚点,默认值(-1,-1)为内核的中心。
borderType 像素外推法选择标志
方框滤波
boxFilter(src, dst, ddepth, ksize, anchor, normalize, borderType)
参数说明:
ddepth 输出图像的数据类型深度,设置-1自动确定
normalize 是否将卷积核进行归一化,默认为true
其他参数同均值滤波
高斯滤波
GaussianBlur(src, dst, ddepth, ksize, sigmaX, sigmaY, borderType)
参数说明:
sigmaX X方向的高斯滤波器标准偏差
sigmaY Y方向的高斯滤波器标准偏差
其他参数同均值滤波
2、非线性滤波
中值滤波
medianBlur(src, dst, ksize)//主要用于去除椒盐噪声
双边滤波
bilateralFilter(src, dst, d, sigmaColor, sigmaSpace, borderType)//滤除噪声的同时,保持边缘清晰
参数说明:
d 滤波过程中每个像素邻域的直径
sigmaSpace 颜色空间滤波器的标准差值
sigmaSpace 空间坐标中滤波器的标准差值
3、边缘检测
拉普拉斯
Laplacian(src, dst, ddepth, ksize, scale, delta, borderType)//对噪声敏感,一般先使用高斯滤波去噪
参数说明:
ddepth 输出图像的数据类型深度,设置-1自动确定
ksize 滤波器的大小,必须设置正奇数
scale 导数结果缩放因子,默认为1不缩放
delta 偏值,在计算结果中附加的
坎尼
Canny(image, edges, threshhold1, threshhold2, apertureSize, L2gradient)//对噪声不敏感,效果较好
参数说明:
image 输入图像,仅支持CV_8U类型
edges 输出图像,与image尺寸和数据类型相同的单通道图像
threshhold1 第一个滞后阈值
threshhold2 第二个滞后阈值
apertureSize Sobel算子的直径
L2gradient 计算图像梯度幅值方法的标志
五、图像形态学
1、连通域
连通域统计
*原型1:
connectComponents(image, labels, connectivity, ltype, ccltype)//返回值为二值图像中连通域的个数
*原型2:
connectComponents(image, labels, connectivity = 8, ltype = CV_32S)//简化版本,带默认参数
参数说明:
image 输入图像,二值化后的图像,仅支持CV_8U类型
labels 标记不同连通域后的输出图像
connectivity 标记连通域时使用的邻域种类,有4邻域和8邻域
ltype 输出图像的数据类型,支持CV_32S和CV_16U
ccltype 标记连通域时使用的算法标志
连通域统计信息
*原型1:
connectComponentsWithStats(image, labels, stats, centroids, connectivity, ltype, ccltype)
*原型2:
connectComponentsWithStats(image, labels, stats, centroids, connectivity = 8, ltype = CV_32S)
参数说明:
stats 含有不同连通域统计信息的矩阵,CV_32S,每一行代表一个连通域的统计特性
centroids 每个连通域的质心坐标,CV_64F
2、腐蚀与膨胀
结构元素
getStructuringElement(shape, ksize, anchor = Point(-1,-1))//计算结构元素,用于腐蚀/膨胀
参数说明:
shape 生成结构元素的种类
ksize 结构元素的尺寸
anchor 结构元素的中心点,默认(-1,-1)为几何中心
图像腐蚀
erode(src, dst, kernel, anchor = Point(-1,-1), iterations = 1, borderType = BORDER_DEFAULT, borderValue = morphologyDefaultBorderValue())
参数说明:
kernel 用于腐蚀操作的结构元素,可自定义或由getStructuringElement得到
anchor 结构元素的中心点,默认(-1,-1)为几何中心
iterations 腐蚀的迭代次数
borderType 像素外推法选择标志
borderValue 使用边界不变外推法的边界值
图像膨胀
dialate(src, dst, kernel, anchor = Point(-1,-1), iterations = 1, borderType = BORDER_DEFAULT, borderValue = morphologyDefaultBorderValue())
3、形态学应用
形态学操作
morphologyEx(src, dst, op, kernel, anchor = Point(-1,-1), iterations = 1, borderType = BORDER_DEFAULT, borderValue = morphologyDefaultBorderValue())
参数说明:
op 形态学操作类型的标志,可选腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算、黑帽运算、击中击不中运算
图像细化,骨架提取
thinning(src, dst, thinningType = THINNING_ZHANGSUEN)//thinningType为细化算法选择标志