OPENMV——识别绿色小球并通过串口把信息发送到单片机,进而控制小车追小球

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))
          

    

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用OpenMV来进行颜色识别小球踪。首先,你需要安装OpenMV IDE并连接OpenMV摄像头。 以下是一个基本的代码示例,用于识别踪一个特定颜色的小球: ```python import sensor import image import time # 初始化摄像头 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QQVGA) sensor.skip_frames(10) sensor.set_auto_gain(False, value=100) # 设置颜色阈值 red_threshold = (30, 100, 15, 127, 15, 127) # (R_min, R_max, G_min, G_max, B_min, B_max) # 初始化屏幕显示 lcd = ili9341.ILI9341(dc=pin('Y9'), cs=pin('Y10'), rst=pin('Y11'), width=320, height=240) while True: # 捕获图像 img = sensor.snapshot() # 寻找颜色区域 blobs = img.find_blobs([red_threshold]) if blobs: # 找到最大的色块 max_blob = max(blobs, key=lambda b: b.pixels()) # 在色块周围画一个矩形 img.draw_rectangle(max_blob.rect()) img.draw_cross(max_blob.cx(), max_blob.cy()) # 在LCD屏幕上显示图像 lcd.display(img) ``` 在这个示例中,我们首先初始化摄像头并设置图像格式和大小。然后,我们设置了一个颜色阈值,用于识别红色小球。接下来,我们进入一个循环,在每次循环中捕获图像并寻找颜色区域。如果找到了匹配的颜色区域,我们会找到最大的色块,并在它周围画一个矩形和十字。最后,我们将图像显示在连接的LCD屏幕上。 你可以根据需要调整代码中的颜色阈值和其他参数,以适应不同的场景和小球颜色。此外,OpenMV还提供了许多其他功能和API,可以用于图像处理和机器视觉任务。你可以参考OpenMV的文档和示例代码来进一步探索其功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值