OPENMV代码
# Measure the distance
#
# This example shows off how to measure the distance through the size in imgage
# This example in particular looks for yellow pingpong ball.
import sensor, image, time
from machine import UART
uart = UART(3, 115200) #OpenMV RT 注释掉这一行,用下一行UART(1)
roi1 = [(32, 0, 32, 120),
(52, 0, 52, 120),
(108, 0, 108, 120),
(128, 0, 128, 120),
]
# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
yellow_threshold = (53, 25, -128, -13, -128, 127)
# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
K=5000#the value should be measured
length=0;
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # Take a picture and return the image.
blobs = img.find_blobs([yellow_threshold])
if len(blobs) == 1:
# Draw a rect around the blob.
b = blobs[0]
img.draw_rectangle(b[0:4]) # rect
img.draw_cross(b[5], b[6]) # cx, cy
Lm = (b[2]+b[3])/2
length = K/Lm
print(length)
if length < 400:
uart.writechar(0x41) #发送停止
time.sleep_ms(50)
else:
if 52<b[5]<=108:
uart.writechar(0x30) #发送前进
time.sleep_ms(50)
elif 32<b[5]<=52:
uart.writechar(0x4C) #发送左转
time.sleep_ms(50)
elif 108<b[5]<=128:
uart.writechar(0x31) #发送右转
time.sleep_ms(50)
elif 0<b[5]<=32 :
uart.writechar(0x4C) #发送迅速左转52
time.sleep_ms(50)
elif 128<b[5]<=160 :
uart.writechar(0x31) #发送迅速右转32
time.sleep_ms(50)
else:
uart.writechar(0x41) #发送停止
time.sleep_ms(50)
for rec in roi1:
img.draw_line(rec, color=(255, 0, 0))