使用简单二值分布的问题:检测到的边缘过厚;很难确定阈值
canny算子基于sobel算子,类似于为sobel返回的图像添加两个阈值;
canny(
image,
dst,
低阈值,
高阈值)
在滞后阈值化之前,如果检测到梯度幅值不是梯度方向最大值,那么对应的边缘点被移除,这也是为什么边缘可以变薄
滞后阈值化;
霍夫变换检测直线;((2条消息) 有关opencv的学习(22)—霍夫变换及应用_一粒菜鸟的学习日记的博客-CSDN博客_霍夫变换的应用)
void HoughLines(InputArray image,OutputArray lines,
double rho,double theta, int threshold,
double srn=0,double stn=0 );
src:输入原图像(一般为8位单通道二值图像);
lines: 经过霍夫变换后检测线条的输出矢量, 每一条线由两个元素的矢量(ρ, Θ)表示, 其中ρ是离坐标原点的距离, Θ是弧度线条旋转角度(0表示垂直线, π/2度表示水平线);
rho: 以像素为单位的距离精度, 另一种表述方式是直线搜索时的进步尺寸的单位半径;
theta: 以弧度为单位的角度精度, 另一种表述方式是直线搜索时的进步尺寸的角度单位;
threshold: 累加平面的阈值参数, 即识别某部分为一条直线时它在累加平面中必须达到的值, 大于阈值threshold的线段才可以被检测通过并返回到结果中;
srn: 默认值0, 对于多尺度的霍夫变换, 这是第三个参数进步尺寸rho的除数距离;
stn: 默认值0, 对于多尺度霍夫变换, 表示单位角度theta;