OPENMV的形状和颜色组合识别

news2024/11/13 3:43:18

 使用openmv,通过阈值颜色和形状来去真假宝藏。调试过程发现颜色的阈值比较重要,因为不准的话,它会把一些颜色相近的物体也识别了。识别的精度有待提高,可以使用YOLOV5来精确识别,奈何本人没精力来弄这个。

打开机器视觉的阈值调节器 

使用方法: 阈值调节主要是把你想要的颜色调为白色,其它颜色为黑色。将调节好的六个参数复制至代码那里。

 共六个参数,从上到下按顺序,L、A、B的最小值不超过其最大值,但也看情况。

 阈值没调好的效果。

(openmv拍宿舍,是谁放假了还在学校参加比赛 ^@^ ,大冤种就是我)

 

 附一段杂的代码,仅供参考:

import sensor, image, time

sensor.reset()                      # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QQVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000)     # Wait for settings take effect.
sensor.set_auto_gain(False)  # 关闭自动增益
sensor.set_auto_whitebal(False)  # 关闭自动白平衡
clock = time.clock()

fs_cnt = 0

x_list = []
y_list = []
len_list = []
area_list = []
color_list = []

x_location = 0
y_location = 0

shape = 0     # 0没检测到1圆形2长方形3三角形
color = 0     # 0没检测到1圆形2长方形3三角形

sidelen = 0   # 单位cm
area = 0

xt = 0

red_threshold = [(27,54,-35,59,3,68)]      #红色阈值
blue_threshold = [(37, 74, -80, 6, -100, -5)]   #浅蓝色阈值
yellow_threshold = [(38, 86, -40, 83, 27, 118)] #黄色阈值
green_threshold  = [(15, 52, -88, -12, -122, 44)]  #绿色阈值


while True:
    clock.tick()
    fs_cnt = fs_cnt + 1
    img = sensor.snapshot().lens_corr(1.8)
    #img.bilateral(1)

    #矩形识别
    for d in img.find_rects(threshold=10000):
        area = (d[0], d[1], d[2], d[3])
        statistics1 = img.get_statistics(roi=area)  # 像素颜色统计
        xq = 0
        xq = d[2] / d[3]
        coners = d.corners()
        sb = ((abs(coners[0][0] - coners[1][0]))**2 + (abs(coners[0][1]-coners[1][1])**2))**0.5
        #识别红色矩形(3, 59, -82, 108, -122, 44)
        if 3<statistics1.l_mode()<59 and -82<statistics1.a_mode()<108 and -122<statistics1.b_mode()<44 and 0.8<xq<1.2:
            #color = 1
            x_location = int(d[0] + d[2] / 2)
            y_location = int(d[1] + d[3] / 2)

            img.draw_rectangle(d.rect(), color=(0, 255, 0))
            img.draw_cross(x_location, y_location, color=(0,255,0)) #绿色标识
            print("识别红色矩形")

        #识别三角形
        for g in img.find_blobs(green_threshold):
            Solidty = g.solidity()
            Roundness = g.roundness()
            pixels = g.pixels()
           # abs(width - height) <= 10:
            xt = g.w()/g.h()
            if  0.1<= Solidty <=0.815 and 0.9< xt <1.1 and Roundness < 0.9405 and 250 < pixels < 3000:
                x_location = int(g.x() + 0.5 * g.w())
                y_location = int(g.y() + 0.5 * g.h())
                img.draw_rectangle(g.x(), g.y(), g.w(), g.h(), color=(255, 0, 0))
                img.draw_string(g.x() + 2, g.y() + 2, "green_rantangle")
                #img.draw_cross(x_location, y_location, color=(0,255,0))
                print("识别绿色三角形")







     #识别蓝色矩形(35, 73, -49, -9, -34, 62)
     #if 35<statistics1.l_mode()<73 and -49<statistics1.a_mode()<-9 and -34<statistics1.b_mode()<62 and 0.8<xq<1.2:
     #       x_location = int(d[0] + d[2] / 2)
      #      y_location = int(d[1] + d[3] / 2)
      #      img.draw_rectangle(d.rect(), color=(255, 255, 0))
      #      img.draw_cross(x_location, y_location, color=(255,255,0))  #黄色标识
      #      print("识别蓝色矩形")

    #识别圆形
    for c in img.find_circles(threshold=2000, x_margin=100, y_margin=10, r_margin=10,
                          r_min=10, r_max=200, r_step=2):
        area = (c.x() - c.r(), c.y() - c.r(), 2 * c.r(), 2 * c.r())
        statistics = img.get_statistics(roi=area)
        #识别黄色圆
        if 38<statistics.l_mode()<86 and -40<statistics.a_mode()<83 and 27<statistics.b_mode()<118:
            x_location = c.x()
            y_location = c.y()
            img.draw_cross(c.x(), c.y(), size=5, color=(255,0,255))
            img.draw_circle(c.x(), c.y(), c.r(), color=(255, 0, 255))
            print("识别黄色圆")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Proxmox VE 为 Windows 虚拟机添加硬盘遇到的问题

环境&#xff1a;PVE 8.x、Windows 11/Windows Server 2019 &#x1f449;问题一&#xff1a; 为 windows 虚拟机添加磁盘&#xff0c;重启虚拟机后&#xff08;在 windows 系统中重启&#xff09;磁盘未能生效&#xff0c;并显示为橘色。 ❗橘色 意味需要重启VM才能生效&…

BIO实战、NIO编程与直接内存、零拷贝深入辨析-02

网络通信编程基本常识 什么是 Socket &#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。在设计模式中&#xff0c;Socket 其实就是一个门面模式&#xff0c;它把复杂的 TCP/IP 协议处理和…

RocketMQ学习笔记(基础篇)

目录 RocketMQ简介 单Master模式 多Master模式 多Master多Slave模式&#xff08;异步&#xff09; 多Master多Slave模式&#xff08;同步&#xff09; 双主双从集群 事务消息 事务消息发送及提交 事务补偿 事务消息状态 RocketMQ高级功能 消息存储 存储介质 消息的…

vue upload 下载

目录 上传 下载 get post 对象/文件流 download处理返回 文件流 axios.post 封装axios 后端直接返回文件流&#xff0c;打开下载文件是 [object Object]&#xff0c;将res改成res.data即可 1.请求设置类型responseType: blob&#xff08;如果没有设置&#xff0c;打…

14_Linux设备树下的platform驱动编写

目录 设备树下的platform驱动简介 运行测试 设备树下的platform驱动简介 platform驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理&#xff0c;这个是Linux内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。在没有设备树的Linux内…

1770_VirtualBox下安装Debian

全部学习汇总&#xff1a; GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 作为我自己的日常使用&#xff0c;Debian基本上没有出现过。最多是让它运行在某个设备上作为一个服务的平台&#xff0c;因为很多东西我懒得去配置。 Debia…

前端 | (二)各种各样的常用标签 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 文章目录 &#x1f4da;HTML排版标签&#x1f4da;HTML语义化标签&#x1f4da;块级元素与行内元素&#x1f4da;文本标签&#x1f407;常用的文本标签&#x1f407;不常用的文本标…

模版模式在Spring中的应用

前言 模式模式在Spring中的应用较多&#xff0c;这里结合JdbcTemplate的源码来和大家一起学习下&#xff0c;更加深刻滴认识下模版模式&#xff0c;以便在日常开发中&#xff0c;能灵活运用模版模式&#xff0c;来减少重复代码&#xff0c;增强代码的可拓展性。 何为模版模式…

Python学习(七)

#字典 #字典的定义&#xff0c;同样是使用{}&#xff0c;不过存储的元素是一个个的&#xff1a;键值对。如下语法&#xff1a; my_dict{"周杰伦":99,"林俊杰":99} print(f"字典的内容是&#xff1a;{my_dict},类型是&#xff1a;{type(my_dict)}"…

Vue条件渲染

v-if 和 v-show <body> <div id"root"><!--用v-show做条件渲染--> <!-- <h2 v-show"false">欢迎来到{{name}}</h2>--><!--使用v-if做条件渲染--><h2 v-if"false">欢迎来到{{name}}</h2&g…

一文读懂STM32芯片总线

目录 一、前言 二、总线基础知识概述 (1)、总线在芯片中的角色 (2)、总线的类型 (3)、总线的指标 (4)、AHB和APB 三、总线框架结构 (1)、结构类型 (2)、总线模块 (3)、总线交互 四、总结 一、前言 本篇介绍STM32芯片内部的总线系统结构&#xff0c;嵌入式芯片内部的…

C++11左值和右值、左值引用和右值引用浅析

从字面意思来讲&#xff0c;左值就是“能用在赋值语句等号左侧的内容&#xff08;它得代表一个地址&#xff09;”&#xff1b;右值就是不能作为左值的值&#xff0c;即右值不能出现在赋值语句中等号的左侧。C中的一条表达式&#xff0c;要么就是右值&#xff0c;要么就是左值&…

钉钉监控Hippo4j线程池通知报警

&#x1f680; 线程池管理工具-Hippo4j &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#…

软考03海明校验码

文章目录 前言一、练习一二、练习二总结 前言 海明校验码可以用来纠正错误 公式&#xff1a; 2k-1≥nk n为数据位&#xff0c;k为校验位 编码规则&#xff1a;校验位为2的次方&#xff0c;其他为数据位。 一、练习一 数据位为4&#xff0c;校验位最小为多少位&#xff1f; 答&…

《微服务架构设计模式》第十二章 部署微服务应用

内容总结自《微服务架构设计模式》 部署微服务应用 一、部署模式分类二、编程语言特定的发布包格式1、概述2、利弊 三、将服务部署为虚拟机1、概览2、利弊 四、将服务部署为容器1、概述2、利弊3、K8S部署 五、Serverless部署1、概述2、利弊3、示例 六、总结 一、部署模式分类 …

计算机丢失msvcp140.dll是什么意思?哪个修复方法更推荐

打开photoshop软件的时候&#xff0c;计算报错丢失msvcp140.dll是什么意思&#xff1f;软件也无法正常启动运行&#xff0c;这个主要的原因就是电脑系统中的msvcp140.dll文件丢失或者损坏了&#xff0c;运行需要该文件的程序或应用程序时&#xff0c;操作系统无法找到该特定的动…

低代码都做了什么?怎么实现 Low-Code?

前言 低代码的概念早在很多很多年前就已经出现了&#xff0c;比如最早期的Dreamweaver 1.0&#xff0c;使用这种可视化编辑工具根本不需要投入较高的学习成本就可以轻松实现一个Web页面。而低代码最大的初衷也正是让开发者或用户减少编码时间&#xff0c;从而把更多的时间和精力…

Python应用实例(二)数据可视化(五)

数据可视化&#xff08;五&#xff09;制作全球地震散点图&#xff1a;JSON格式 1.地震数据2.查看JSON数据3.创建地震列表4.提取震级5.提取位置数据6.绘制震级散点图7.另一种指定图表数据的方式 下载一个数据集&#xff0c;其中记录了一个月内全球发生的所有地震&#xff0c;再…

Unity3d-路径巡逻

使用U3D实现的简单巡逻方法 游戏对象逐个向组成路径的节点进行直线移动两种巡逻方案 根据列表顺序移动&#xff0c;到达最后一个后&#xff0c;直接返回第一个&#xff0c;重新开始循环根据列表顺序移动&#xff0c;到达最后一个后&#xff0c;根据顺序反向移动到第一个&#…

用 Pytest+Appium+Allure 做 UI 自动化的那些事~(有点干)

目录 前言&#xff1a; Appium 不常见却好用的方法 Appium 直接执行 adb shell 方法 Appium 直接截取元素图片的方法 Appium 直接获取手机端日志 Appium 直接与设备传输文件 Pytest 与 Unittest 初始化上的区别 1.Pytest 与 unitest 类似&#xff0c;有些许区别&#x…