OpenMV:07形状识别

矩形识别
Rect.py

# Find Rects Example
#
# 这个例子展示了如何使用april标签代码中的四元检测代码在图像中找到矩形。 四元检测算法以非常稳健的方式检测矩形,并且比基于Hough变换的方法好得多。 例如,即使镜头失真导致这些矩形看起来弯曲,它仍然可以检测到矩形。 圆角矩形是没有问题的!
# (但是,这个代码也会检测小半径的圆)...

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565) # 灰度更快(160x120 max on OpenMV-M7)
sensor.set_framesize(sensor.QQVGA)#160 * 120
sensor.skip_frames(time = 2000)
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()

    # 下面的`threshold`应设置为足够高的值,以滤除在图像中检测到的具有
    # 低边缘幅度的噪声矩形。最适用与背景形成鲜明对比的矩形。

    #find_rects只有两个参数roi(x,y,w,h) + threshold
    #如果只想显示图像右下角位置,则roi=(80,60,80,60)
    for r in img.find_rects(threshold = 20000):                                         
               #rect.rect()返回一个矩形元组(x, y, w, h),用于如矩形的边界框的image.draw_rectangle()等其他的 image 方法。
        
        img.draw_rectangle(r.rect(), color = (255, 0, 0))
        #image.draw_rectangle(x, y, w, h[, color[, thickness=1[, fill=False]]])在图像上绘制一个矩形。
            # 您可以单独传递x,y,w,h或作为元组(x,y,w,h)传递。
            
  • 9
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
OpenMV可以使用颜色识别形状识别相结合的方式来实现同时识别。首先,使用`find_blobs()`函数进行颜色识别,并将识别到的颜色区域用矩形框标出。然后,在颜色区域内使用`find_circles()`或`find_rectangles()`函数进行形状识别,并将识别到的形状用不同的颜色标出。 下面是一个示例代码,可以同时识别红色圆形和蓝色矩形: ```python import sensor, image, time # 设置摄像头分辨率和帧率 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.set_fps(60) # 设置颜色识别阈值和颜色范围 red_threshold = (30, 100, 15, 127, 15, 127) blue_threshold = (50, 100, -70, -10, -0, 60) # 初始化LCD显示器 lcd = None # 开始循环识别 while(True): # 获取图像 img = sensor.snapshot() # 执行红色颜色识别 red_blobs = img.find_blobs([red_threshold]) # 执行蓝色颜色识别 blue_blobs = img.find_blobs([blue_threshold]) # 标记红色圆形 for r in red_blobs: if r.roundness() > 0.5: img.draw_circle(r.cx(), r.cy(), r.w()//2, color=(255,0,0)) img.draw_cross(r.cx(), r.cy(), color=(255,0,0)) # 标记蓝色矩形 for b in blue_blobs: if b.w() / b.h() > 1.2 and b.w() / b.h() < 2.5: img.draw_rectangle(b.rect(), color=(0,0,255)) img.draw_cross(b.cx(), b.cy(), color=(0,0,255)) # 显示图像 if lcd is None: lcd = display.show(img) else: lcd.display(img) # 延时一段时间 time.sleep(10) ``` 在上述代码中,我们首先通过`find_blobs()`函数识别红色和蓝色的区域,然后使用`draw_circle()`和`draw_rectangle()`函数分别标记红色圆形和蓝色矩形。注意,我们还使用`roundness()`函数来判断红色区域是否为圆形,使用宽高比来判断蓝色区域是否为矩形。最后,我们使用LCD显示器显示识别结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值