1. 边缘检测
Sobel():灵活调整水平或者垂直边缘检测,基于高斯平滑和微分求导
void Sobel(src, dst, depth, dx, dy, ksize=3);
// depth: 对应图像类型
// dx, dy: x,y方向的差分阶数,控制在x,y轴上的边缘检测程度
// case:
Sobel(src, dst, CV_16S, 0, 1, 3);
Canny(): 低错误率+高定位性+最小响应
void Canny(src, dst, threshold_1, threshold_2, apertureSize=3);
// threshold_1, threshold_2: 较大的值用于控制强边缘连接,较小的值用与控制弱边缘连接
// apertureSize: Sobel算子的孔径大小
// case:
Canny(src, edge, 3, 9, 3);
Laplacian():原图减去其Laplacian算子可以增强对比度
void Laplacian(src, dst, depth, ksize=1, double scale=1,
double delta=0, borderType=BORDER_DEFAULT);
// scale: 缩放因子
// case: 后面三个参数为默认参数
Laplacian(src, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
scharr滤波器:
void Scharr(src, dst, depth, dx, dy, scale=1, delta=1, borderType=BORDER_DEFAULT);
// case:
Scharr(src, dst, CV_16S, 1, 0, 1, 0, BORDER_DEFAULT);
2.霍夫变换
用于检测直线 / 曲线 / 圆
标准霍夫变换(检测直线) HoughLines():
void HoughLines(src, dst, double rho, double theta, threshold, double srn=0, double stn=0);
// rho: 直线搜索尺寸的单位半径
// theta: 角度精度,以弧度为单位
// thresold: 判定为直线所需的累加直线值
// srn / stn: 默认为0,适用于多尺度霍夫变换
// case: 绘制直线
vectorlines;
HoughLines(src, dst, 1, CV_PI/180, 150, 0, 0);
for(size_t i=0; i
累计概率霍夫变换 HoughLinesP():
void HoughLinesP(src, dst, rho, theta, threshold, minLineLength=0, maxLineGap=0);
// minLineLength: 最短线段长度
// maxLineGap: 线段最短断裂距离
// case:
HoughLinesP(src, dst, 1, CV_PI/180, 80, 50, 10);
霍夫圆变换 HoughCircles():检测灰度图中的圆
void HoughCircles(src, dst, method, dp, minDist,
param1=100, param2=100, minRadius=0, maxRadius=0);
// method: 检测方法,目前可用 HOUGH_GRADIENT
// dp: 用于检测圆心的累加器图像的分辨率与输入图像之比的倒数,
// dp=1则分辨率相同,dp=2则累加器有输入图像的一半的宽高
// param1:method的对应参数,传递给Canny算子的高低阈值
// param2: method的对应参数,越大则检测的圆更接近完美,否则检测出越多不完美的圆
// minRadius / maxRadius: 检测出的圆半径的最大最小值
// case:
HoughCircles(src, dst, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);