Canny算法介绍 五步 in cv::Canny 高斯模糊 - GaussianBlur 灰度转换 - cvtColor 计算梯度 – Sobel/Scharr 非最大信号抑制 高低阈值输出二值图像 Canny算法介绍-高低阈值输出二值图像 T1, T2为阈值, 凡是高于T2的都保留, 凡是小于T1都丢弃, 从高于T2的像素出发,凡是大于T1而且相互连接的,都保留。 最终得到一个输出二值图像。 推荐的高低阈值比值为 T2: T1 = 3:1/2:1其中T2为高阈值,T1为低阈值
Canny( InputArray src, // 8-bit的输入图像 OutputArray edges, // 输出边缘图像, 一般都是二值图像,背景是黑色 double threshold1, // 低阈值,常取高阈值的1/2或者1/3 double threshold2, // 高阈值 int aptertureSize, // Soble算子的size,通常3x3,取值3 bool L2gradient // 选择 true表示是L2来归一化,否则用L1归一化, 默认情况一般选择是L1,参数设置为false
)
Mat src, gray_src, dst; int t1_value = 50; int max_value = 255; const char* OUTPUT_TITLE = "Canny Result"; void Canny_Demo(int, void*); int main(int argc, char** argv) { src = imread(STRPAHT2); if (!src.data) { printf("could not load image...\n"); return -1; } cvtColor(src, gray_src, CV_BGR2GRAY); createTrackbar("Threshold Value:", OUTPUT_TITLE, &t1_value, max_value, Canny_Demo); Canny_Demo(0, 0); waitKey(0); return 0; } void Canny_Demo(int, void*) { Mat edge_output; blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT); Canny(gray_src, edge_output, t1_value, t1_value * 2, 3, false); imshow(OUTPUT_TITLE, ~edge_output); }