自适应Canny算子的方法
该算法大致原理为:
–>读图
–>转灰度
–>进行X,Y方向的sobel处理得到两个梯度图
–>将两个梯度图图进行叠加
–>找到叠加图中最大梯度值maxv
–>对叠加图求灰度直方图,并找到最大灰度频数HmaxNum和对应的灰度值Hmax
–>求像素最值方差
–>High = Emax + Hmax, Low = High * 0.4
–>Canny(input , output ,High ,Low)
代码
///新自适应canny
void AdaptiveCanny(const Mat& src, Mat& canny_img, double& HIGH, double& LOW, int aperture_size)
{
double low, high, l_low, l_high = 0;
const int cn = src.channels();
cv::Mat dx_img(src.rows, src.cols, CV_16SC(cn));
cv::Mat dy_img(src.rows, src.cols, CV_16SC(cn));
// sobel处理
cv::Sobel(src, dx_img, CV_16S, 1, 0, aperture_size, 1, 0, cv