Display Unmodified Image after Edge Detection ...

I’d like to be able to do some machine vision calculations on an image … but display the original image afterwards and not the modified image.

For instance, normally, to do edge detection like so:

#inside the while loop and assuming the kernel is defined, etc
.
.
.    
    img = sensor.snapshot() # Take a picture and return the image.

    img.morph(kernel_size, kernel)
    img.binary(thresholds)

    # Erode pixels with less than 2 neighbors using a 3x3 image kernel
    img.erode(1, threshold = 2)

BUT! This modifies the original image snapshot … and doesn’t allow me to display the detected edges on top of the original image. Is there a way to do this?

I thought of doing something like this:

#inside the while loop ... with the proper settings above  
.
.
.
    img = sensor.snapshot() if snapshot_source else img_reader.next_frame(copy_to_fb=True, loop=True)
    img_MV = img
    img_MV.binary(binary_thresholds, invert = False)
    img_MV.morph(kernel_size, kernel)
    img_MV.binary(edge_thresholds, invert = False)
    # Erode pixels with less than 2 neighbors using a 3x3 image kernel
    img_MV.erode(1, threshold = 2)
    
    #and then DISPLAY the img with the img_MV on top of it

Some functions modify the original image because there’s not enough memory to make a copy. Unfortunately there’s no way around this (for some functions). If the image is really small you can make a copy on the heap first using image.copy(), or you could save the image to disk.

Save the image to the disk and then load it back into the FB. This is quite fast.