pythoncomputer-visionscikit-imagecanny-operator

Trouble with Canny Edge Detector - Returning black image


I'm trying to run the canny edge detector on this image:

enter image description here

With this code:

def edges(img):
    from skimage import feature
    img = Image.open(img)
    img.convert('L')
    array = np.array(img)    
    out = feature.canny(array, sigma=1, )
    return Image.fromarray(out,'L')

edges('Q_3.jpg').save('Q_3_edges.jpg')

But I'm just getting a black image back. Any ideas what I could be doing wrong? I tried sigma of 1 and of 3.

enter image description here


Solution

  • So the issue was with the canny function returning and array of type boolean.

    Oddly, setting the Image.fromarray mode to '1' didn't help. Instead this was the only way I could get it working; converting the output array to grayscale:

    def edges(img):
        from skimage import feature
        img = Image.open(img)
        img.convert('L')
        array = np.array(img)
        out = np.uint8(feature.canny(array, sigma=1, ) * 255)
        return Image.fromarray(out,mode='L')