Openmv通过roi感兴趣区--颜色+图像识别

前言:之前跟着星瞳科技Openmv的官方教程,查找色块识别颜色必须要事先确定好颜色的阈值。但若是在没有确定好查找颜色的前提下,想要随机跟踪一个色块该如何去操作。当我学习到了统计信息这一部分内容后,写出此代码来解决问题。

一:对摄像头进行初始化,并且导入头文件

# Untitled - By: 烧杯大师 - 周三 11月 1 2023
import sensor, image, time

#【第一步:对Openmv进行初始化】
sensor.reset()                       # 初始化感光元件
sensor.set_pixformat(sensor.RGB565)  # 设置像素模式 彩色 每个像素 16bit
sensor.set_framesize(sensor.QQVGA)   # 分辨率 160*120
#sensor.set_framesize(sensor.QVGA)   # 分辨率 320*240   帧率过低太卡
sensor.set_auto_gain(False)          # 关闭自动增益
sensor.set_auto_whitebal(False)      # 关闭白平衡
sensor.skip_frames(time = 2000)      # 等待感光元件变稳定

Range = (0,0,160,120)                # QQVGA 设置感兴趣区 roi
#Range = (0,0,320,240)               # QVGA  设置感兴趣区 roi

二:通过感兴趣区域确定识别的颜色

#【第二步:确定识别的颜色(感兴趣区间)】
for i in range(200):
    img = sensor.snapshot()
    img.draw_rectangle((70,50,20,20), color=(255,0,0))
    #                    x   y  w   h   画框颜色
    Statistics = img.get_statistics(roi=(70,50,20,20))
    Threshold = [Statistics.l_min(),Statistics.l_max(), #从统计信息中得到色块阙值
                 Statistics.a_min(),Statistics.a_max(),
                 Statistics.b_min(),Statistics.b_max()]
    #print(Threshold)

三:寻找色块与图形

#【第三步:寻找色块】
while(True):
    img = sensor.snapshot().lens_corr(1.8)
    for c in img.find_circles(roi = Range, threshold = 3500, x_margin = 10, y_margin = 10, r_margin = 10, r_min = 2, r_max = 100, r_step = 2):
        area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
        #area【起始X(圆心-半径),起始Y(圆心-半径),宽度2R,长度2R】
        #area为识别到的圆的区域,即圆的外接矩形框
        statistics = img.get_statistics(roi=area)#像素颜色统计
        #print(statistics)
        #(0,100,0,120,0,120)是红色的阈值,所以当区域内的众数(也就是最多的颜色),范围在这个阈值内,就说明是红色的圆。
        #l_mode(),a_mode(),b_mode()是L通道,A通道,B通道的众数。
        if Threshold[0]<statistics.l_mode()< Threshold[1] and Threshold[2]<statistics.a_mode()< Threshold[3] and Threshold[4]<statistics.b_mode()< Threshold[5]:
            #if the circle is red
            img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0))
            img.draw_cross(c.x(), c.y())           #画十字
            print(c.x(), c.y())
            #识别到的红色圆形用红色的圆框出来
        else:
            img.draw_rectangle(area, color = (255, 255, 255))
            #将非红色的圆用白色的矩形框出来

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenMV是一款基于Python的开源机器视觉开发平台,它可以用于颜色识别。在OpenMV中,颜色识别是通过比较图像中的像素RGB值与预先设定的颜色阈值来实现的。阈值是一个范围,用来确定哪些像素属于特定颜色。 对于颜色识别,你可以使用OpenMV的`color_code()`函数来定义颜色阈值。该函数接受一个RGB值作为参数,并返回对应的颜色阈值代码。例如,RGB(255, 0, 0)表示红色,可以使用`color_code(255, 0, 0)`来获取红色的阈值代码。同样地,RGB(0, 255, 255)表示青色,可以使用`color_code(0, 255, 255)`来获取青色的阈值代码。 一旦你获得了颜色的阈值代码,你可以将其用于OpenMV的`color_detection()`函数中,以实现对特定颜色的识别。该函数会将图像中与颜色阈值匹配的像素标记出来,帮助你进行进一步的图像处理或者决策。 总结来说,通过设置颜色RGB值和阈值代码,OpenMV可以实现颜色识别功能。你可以根据需要定义不同颜色的阈值,以适应不同的应用场景。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [OpenMV——色块识别](https://blog.csdn.net/qq_61448516/article/details/128764805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值