diff --git a/usr/examples/09-Feature-Detection/lines.py b/usr/examples/09-Feature-Detection/lines.py new file mode 100644 index 000000000..bed34707b --- /dev/null +++ b/usr/examples/09-Feature-Detection/lines.py @@ -0,0 +1,49 @@ +# Hough Transform Example: +# +# This example demonstrates using the Hough transform to find lines in an image. +import sensor, image, time + +kernel_size = 1 # kernel width = (size*2)+1, kernel height = (size*2)+1 +kernel = [-1, -1, -1,\ + -1, +8, -1,\ + -1, -1, -1] + +# This is a high pass filter kernel. see here for more kernels: +# http://www.fmwconcepts.com/imagemagick/digital_image_filtering.pdf +thresholds = [(200, 255)] # grayscale thresholds + +sensor.reset() # Initialize the camera sensor. +sensor.set_pixformat(sensor.GRAYSCALE) # or sensor.RGB565 +sensor.set_framesize(sensor.QQVGA) # or sensor.QVGA (or others) +sensor.skip_frames(30) # Let new settings take affect. +clock = time.clock() # Tracks FPS. + +# On the OV7725 sensor, edge detection can be enhanced +# significantly by setting the sharpness/edge registers. +# Note: This will be implemented as a function later. +if (sensor.get_id() == sensor.OV7725): + sensor.__write_reg(0xAC, 0xDF) + sensor.__write_reg(0x8F, 0xFF) + +while(True): + clock.tick() # Track elapsed milliseconds between snapshots(). + sensor.set_pixformat(sensor.GRAYSCALE) + 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) + img.draw_rectangle((0, 0, 160, 120), color=0x00) + + # Find lines. + lines = img.find_lines(threshold=40) + # Switch back to RGB to draw red lines. + sensor.set_pixformat(sensor.RGB565) # or sensor.RGB565 + img = sensor.snapshot() + for l in lines: + img.draw_line(l, color=(0xFF, 0x00, 0x00)) + + print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while + img = sensor.snapshot() # Take a picture and return the image.