Search code examples
opencvedge-detection

Canny Edge detector threshold values gives different result


I am trying to find contour of a image, before that I am applying Canny's edge detector. It's giving different result for different images.For one image it's giving perfect contours at threshold value - min-40 max-240 and for other image its 30-120. I want to make it generic.


Solution

  • In laymen terms, edge detection needs a threshold to tell what difference/change should be counted as edge. For details read here.

    So, the edges depend on the the content of image ie the level of brightness/darkness/contrast. I suggest you to simply find the mean of whole gray image and take threshold as follows:

    min_threshold = 0.66 * mean

    max_threshold = 1.33 * mean

    I have tested it and it gives impressive result. You can use median instead of mean, with almost same result. Another alternative is to first equalize the image and then try threshold of your choice/experimental.

    But again again strongly recommend to try mean method. In case of any query, write here.

    Happy Coding :)