在Canny边缘检测法中,首先是在x和y方向求一阶导数,然后组合为4个方向的导数。这些方向导数达到局部最大值的点就是组成边缘的候选点。
Canny算法中最重要的一个新特点就是其试图将独立边缘的候选像素拼装成轮廓。轮廓的形成是对这些像素运用滞后性阈值。这意味着有两个阈值,上限和下限。
如果一个像素的梯度大于上限阈值,则被认为是边缘像素,如果低于下限阈值,则被抛弃,如果介于二者之间,只有当其与高于上限阈值的像素连接时才会被接受。
Canny一般推荐的阈值比例为2:1 到 3:1之间
void cvCanny(const CvArr * img,CvArr * edges , double lowThresh,double highThresh , int apertureSize = 3);
cvCanny()函数需要输入一幅灰度图像,输出图也一定是灰度的。接下来两个参数的下限阈值和上限阈值,最后一个参数是另一个中孔。通常,这个被Sobel算子用到的中孔是cvCanny()内部使用的。
下面设置高低阈值的比例为3:2
分别将高阈值设置在(0,50),(50,100),(100,150),(150,200),(200,250)之间
int main(int argc, const char * argv[]) {
/*1、加载一幅灰度图像*/
const char filename[] = "/Users/linwang/Downloads/