一:CV::CornerEigeValsAndVecs
CornerEigeValsAndVecs记录图像块的特征值和特征向量用于角点检测。
函数原型:
void CornerEigeValsAndVecs(InputArray src, OutputArray dst, int blocksize, int ksize, int borderType = BORDER_EDFAULT);
参数介绍:
src:输入的单通道8位或浮点图像数组
dst:用来存储结果的图像,和src有相同的大小或类型为CV_32FC(6)
blocksize:领域尺寸
ksize:sobel()算子的孔径参数
borderType :像素外推方式
二:CV::Sobel
Sobel是用于边缘检测的离散微分算子,结合了高斯平滑以及微分。因为图像是二维的,所以需要在两个方向上求导,边缘检测中Gx用于检测纵向边缘,Gy用于检测横向边缘。
函数原型:
void Sobel(InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta, int borderType = BORDER_DEFAULT);
参数介绍:
src:输入的图像数组。
dst:输出的边缘检测的结果图像,大小与src一致。
ddepth:输出图像的深度,不同的输入图像,输出图像有不同的深度。
dx:x方向的差分阶数,1或者0。
dy:y方向的差分阶数,1或者0。
ksize :边缘检测时模板的大小(ksize * ksize),取值为1,3,5,7。
scale :可选参数,算放导数的放缩因子。
delta:可选的增量常数。
borderType :用于判断图像外部像素的边界模式,一般是DORDER_DEFAULT。
三:CV::Laplacian
拉普拉斯算子,二阶导数可以用来边缘检测,因为图像是二维的,需要在两个方向上求导,使用拉普拉斯算子将会使求导变得简单。拉普拉斯算子使用了图像梯度,他内部代码是调用了Sobel算子的。
函数原型:
void laplacian(InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta,int border = BORDER_DEFAULT);
参数介绍:
src:输入的图像数组,Mat类的对象,需为单通道的8位图像。
dst:输出的边缘检测的结果图像,大小与src一致。
ddepth:输出图像的深度,不同的输入图像,输出图像有不同的深度。
ksize :边缘检测时模板的大小(ksize * ksize),取值为1,3,5,7。
scale :可选参数,计算拉普拉斯的比例因子,默认值是1。
delta:表示结果存入目标图之前可选的delta值,默认值是0。
borderType :用于判断图像外部像素的边界模式,一般是DORDER_DEFAULT。
四:CV::ConvertScaleAbs
ConvertScaleAbs的作用是对整个图像数组中的每一个元素(像素)取绝对值,可以把任意类型的数据转为CV_8UC1。
函数原型:
void ConvertScaleAbs(IntputArray src, OutputArray dst, double alpha = 1.0, double beta = 1.0);
参数介绍:
src:输入的图像数组,Mat类的对象,需为单通道的8位图像。
dst:输出的边缘检测的结果图像,大小与src一致。
alpha :乘数因子,默认为1.0。
beta :偏移量,默认1.0。
原理及用法:
若像素值 -255 < src * alpha + beta < 255,取绝对值。
若像素值 src * alpha + beta >= 255 || src * alpha + beta <= -255,取255。