3.4.3-识别形状+颜色-先形状后颜色的方式 STM32串口通信 openmv+STM32串口通信 openmv串口通信openmv识别物体 openmv神经网络训练 openmv数字识
openmv教程合集 openmv入门到项目开发 openmv和STM32通信 openmv和opencv区别 openmv巡线 openmv数字识别教程LCD。
·
非常详细的视频和文字教程,讲解常见的openmv教程包括 巡线、物体识别、圆环识别、阈值自动获取等。非常适合学习openmv、K210、K230等项目
视频合集链接在:
openmv教程合集 openmv入门到项目开发 openmv和STM32通信 openmv和opencv区别 openmv巡线 openmv数字识别教程LCD
3.4.3-识别形状+颜色-先形状后颜色的方式
提高稳定性和准确度,我们可以把物体的多个特征结合一起进行识别,比如先形状后颜色的识别方法。
- 代码是把识别符合 形状和颜色要求的用绿色圈出来,只符合形状圆形的用白色圈出来,所以如何发现比如带识别的小球都没有被白色圈出或者绿色圈出,那么可能是不满足圆形检测要求,所以把 threshold = 2500, 这个阈值可以调整的更小一些。
import sensor, image, time
#教程作者:好家伙VCC
#欢迎交流群QQ: 771027961 作者邮箱: 1930299709@qq.com
#更多教程B站主页:[好家伙VCC的个人空间-好家伙VCC个人主页-哔哩哔哩视频](https://space.bilibili.com/434192043)
#淘宝主页链接:[首页-好家伙VCC-淘宝网](https://shop415231378.taobao.com)
#更多嵌入式手把手教程-尽在好家伙VCC
# 定义颜色阈值(L, A, B),用于识别红色
# L通道:亮度值,较小表示较暗的颜色
# A通道:绿色与红色的色差,红色偏大
# B通道:蓝色与黄色的色差,红色偏小
color_threshold = (0, 100, 0, 127, 0, 127) # (L_min, L_max, A_min, A_max, B_min, B_max)
# 初始化摄像头模块
sensor.reset() # 重置摄像头,确保设备正常工作
sensor.set_pixformat(sensor.RGB565) # 设置摄像头的像素格式为RGB565,每个像素16位色深
sensor.set_framesize(sensor.QQVGA) # 设置摄像头的分辨率为QQVGA(160x120),适合快速处理
# *************************** 如果不需要镜像就注释掉以下代码 **************************
# 摄像头镜像和翻转设置,根据摄像头的安装方向调整
sensor.set_vflip(True) # 设置垂直翻转,适用于摄像头上下安装的情况
sensor.set_hmirror(True) # 设置水平翻转,适用于摄像头左右安装的情况
# *************************** 如果不需要镜像就注释掉以上代码 **************************
sensor.skip_frames(time = 2000) # 跳过前几帧的图像,确保图像稳定后再开始处理
sensor.set_auto_gain(False) # 必须关闭自动增益,防止影响颜色追踪
sensor.set_auto_whitebal(False) # 必须关闭自动白平衡,防止影响颜色追踪
# 创建一个时钟对象,用于计算和控制帧率
clock = time.clock()
# 主循环,不断获取摄像头图像并进行处理
while(True):
clock.tick() # 计时当前帧的处理时间,计算帧率
# 获取当前图像并进行镜头畸变校正,纠正因镜头产生的畸变
img = sensor.snapshot().lens_corr(1.8) # 1.8是畸变系数,适当调整可以改善图像质量
# 使用霍夫变换查找圆形,并返回找到的圆的信息
for c in img.find_circles(
threshold = 2500, # 设置圆形检测的阈值。较高的值意味着需要更明显的圆形才能被检测到
x_margin = 10, # 圆心的X坐标允许的误差范围
y_margin = 10, # 圆心的Y坐标允许的误差范围
r_margin = 10, # 圆半径的允许误差范围
r_min = 2, # 圆的最小半径 单位为像素。
r_max = 100, # 圆的最大半径 单位为像素。100 像素对应多少毫米是一个动态计算的问题,需要根据具体的摄像头视场角、分辨率和物体距离来调整。
r_step = 2 # 圆半径变化的步长 单位为像素。
):
# 计算圆形的外接矩形区域,这样可以方便获取圆的统计信息
area = (c.x() - c.r(), c.y() - c.r(), 2 * c.r(), 2 * c.r()) # (x, y, width, height)
# 获取该区域内的像素颜色统计信息
statistics = img.get_statistics(roi=area) # 获取外接矩形区域的像素统计信息(颜色分布)
# 打印该区域的颜色统计数据,用于调试
#print(statistics)
# 判断该区域是否为红色圆
# 使用L、A、B通道的众数来判断颜色是否符合红色范围
if (
color_threshold[0] < statistics.l_mode() < color_threshold[1] and # L通道的众数应小于100,表示较暗的颜色
color_threshold[2] < statistics.a_mode() < color_threshold[3] and # A通道的众数应小于127,表示偏红色
color_threshold[4] < statistics.b_mode() < color_threshold[5] # B通道的众数应小于127,表示偏蓝色
):
# 如果该区域是红色的圆形,用银光绿色的圆框标记该圆形
img.draw_circle(c.x(), c.y(), c.r(), color=(192, 255, 0)) # 银光绿色圆框
print("Circle found: x = {}, y = {}, radius = {}".format(c.x(), c.y(), c.r()))
else:
# 如果不是红色圆形,用白色矩形框标记该区域
img.draw_circle(c.x(), c.y(), c.r(), color=(255, 255, 255)) # 白色
# 打印当前帧率(每秒帧数),便于调试性能
print("FPS %f" % clock.fps()) # 输出当前的帧率
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)