openmv识别颜色--单颜色识别

news/2025/2/6 12:37:23/文章来源:https://www.cnblogs.com/ECHO1234/p/18700587

thresholds = [
(30, 100, 15, 127, 15, 127), # generic_red_thresholds
(30, 100, -64, -8, -32, 32), # generic_green_thresholds
(0, 30, 0, 64, -128, 0),
] //设置颜色阈值,分别代表lab的最大值最小值.

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
sensor.set_auto_gain(False) # must be turned off for color tracking//关闭白平衡和自动增益
sensor.set_auto_whitebal(False) # must be turned off for color tracking//关闭白平衡和自动增益,否则影响颜色识别的效果.
clock = time.clock()

**find_blobs函数
追踪小球是OpenMV用的最多的功能了,在10分钟快速上手中
通过find_blobs函数可以找到色块.我们来讨论一下,find_blobs的细节。

image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)**
//不设置roi则在整个图像中进行颜色识别

//x_stride 就是查找的色块的x方向上最小宽度的像素,默认为2,如果你只想查找宽度10个像素以上的色块,那么就设置这个参数为10:
blobs = img.find_blobs([red],x_stride=10)
//y_stride 就是查找的色块的y方向上最小宽度的像素,默认为1,如果你只想查找宽度5个像素以上的色块,那么就设置这个参数为5:
blobs = img.find_blobs([red],y_stride=5)

//invert invert=True反转阈值,把阈值以外的颜色作为阈值进行查找;不设置的话就默认查找阈值
//area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉

//pixels_threshold 像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
//merge 合并,如果设置为True,那么合并所有重叠的blob为一个。
注意:这会合并所有的blob,无论是什么颜色的。多颜色识别时,如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。
for blob in img.find_blobs(
[thresholds[threshold_index]],
pixels_threshold=200,
area_threshold=200,
merge=True,
):
阈值:
red = (minL, maxL, minA, maxA, minB, maxB)
thresholds = [
(30, 100, 15, 127, 15, 127), # generic_red_thresholds
(30, 100, -64, -8, -32, 32), # generic_green_thresholds
(0, 30, 0, 64, -128, 0),
] //设置颜色阈值,分别代表lab的最大值最小值.

颜色阈值选择工具
OpenMV 的IDE里加入了阈值选择工具,极大的方便了对于颜色阈值的调试。
首先运行hello world.py让IDE里的framebuffer显示图案。
然后打开 工具 → Mechine Vision → Threshold Editor
(工具 → 机器视觉 → 阈值编辑器)
点击 Frame Buffer(帧缓冲区))可以获取IDE中的图像,Image File可以自己选择一个图像文件
拖动六个滑块,可以实时的看到阈值的结果,我们想要的结果就是,将我们的目标颜色变成白色,其他颜色全变为黑色。

颜色直方图
blob色块对象
blob有多个方法:

blob.rect() 返回这个色块的外框——矩形元组(x, y, w, h),可以直接在image.draw_rectangle中使用。

blob.x() 返回色块的外框的x坐标(int),也可以通过blob[0]来获取。

blob.y() 返回色块的外框的y坐标(int),也可以通过blob[1]来获取。

blob.w() 返回色块的外框的宽度w(int),也可以通过blob[2]来获取。

blob.h() 返回色块的外框的高度h(int),也可以通过blob[3]来获取。

blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。

blob.cx() 返回色块的外框的中心x坐标(int),也可以通过blob[5]来获取。

blob.cy() 返回色块的外框的中心y坐标(int),也可以通过blob[6]来获取。

blob.rotation() 返回色块的旋转角度(单位为弧度)(float)。如果色块类似一个铅笔,那么这个值为0180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0360°,也可以通过blob[7]来获取。

blob.code() 返回一个16bit数字,每一个bit会对应每一个阈值。举个例子:

blobs = img.find_blobs([red, blue, yellow], merge=True)

如果这个色块是红色,那么它的code就是0001,如果是蓝色,那么它的code就是0010。注意:一个blob可能是合并的,如果是红色和蓝色的blob,那么这个blob就是0011。这个功能可以用于查找颜色代码。也可以通过blob[8]来获取。

blob.count() 如果merge=True,那么就会有多个blob被合并到一个blob,这个函数返回的就是这个的数量。如果merge=False,那么返回值总是1。也可以通过blob[9]来获取。

blob.area() 返回色块的外框的面积。应该等于(w * h)

blob.density() 返回色块的密度。这等于色块的像素数除以外框的区域。如果密度较低,那么说明目标锁定的不是很好。
比如,识别一个红色的圆,返回的blob.pixels()是目标圆的像素点数,blob.area()是圆的外接正方形的面积。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter3-dymall仿抖音直播商城|Flutter3.27短视频+直播+聊天App实例

自研flutter3.27+dart3.6+getx实战抖音短视频+聊天+直播电商带货app商城应用。 flutter_dymall一款基于最新版Flutter3.27+Dart3.x+Getx+mediaKit原创实战研发抖音app带货商城项目。集成了直播+短视频+聊天三大功能模块。实现了类似抖音app首页全屏沉浸式联动左右滑动页面模块、…

DeepSeek-R1本地部署使用

春节期间突然被DeepSeek刷屏了,这宣传力度是真大,到处都是新闻和本地部署的教程,等热度过了过,简单记录下自己本地部署及相关的内容,就当电子宠物,没事喂一喂:D,不过有能力的还是阅读论文和部署完整版的进一步使用。 论文链接: https://github.com/deepseek-ai/DeepSee…

面向 Workload 级别的灵活可配置 Serverless 弹性解决方案

本文介绍的四种组件,在解决上述问题,具有各自的优势场景。用户可以根据自身实际场景选择合适的能力来用好弹性算力。Serverless 是云计算的进一步延伸,因此其继承了云计算的最大特点,即按需弹性伸缩。这样的模型设计让开发者无需关注具体的部署资源,充分利用资源规模效应,…

腾讯云 TI 平台部署与调用DeepSeek-R1大模型的实战指南

今天我们将继续探讨如何部署一个私有化的 DeepSeek-R1 大模型,具体的部署过程我们将利用腾讯云的 TI 平台进行操作。当前,腾讯云 TI 平台为用户提供了免费体验的满血版 DeepSeek-R1 大模型,同时该平台还提供了开放的 API 接口服务,用户可以方便地将其接入到自己的平台中,进…

本地化部署deepseek For_Mac

最近deepseek非常火爆,蒸馏算法的落地,实现了小资源跑大模型,也极大的降低了本地化运行的门槛,为打工人带来了福音;本地化运行可以解决脱网、隐私、审计等重要问题,适合闲暇聊个天、练练英语、完成打工任务 等step1 下载并安装Ollama Ollama是一个开源的 LLM(大型语言模…

数字先锋 | 车企,出海!天翼云AOne擦亮车企“智慧服务”新名片!

近年来,中国汽车市场迎来巨变,消费者的消费习惯不断变迁,价格战愈演愈烈......如何紧跟数字化转型步伐,实现稳健经营,成为车企所面临的时代命题。作为一家科技型制造企业,某车企主营业务涉及汽车及核心三电等产品的研发、制造、销售及服务。公司产品线覆盖新能源汽车和传…

电影《哪吒之魔童闹海》迅雷BT下载[MP4/1.12GB/2.35GB]百度云高清版共享[HD1280p资源已更新]

在那遥远的古代,天地未分,混沌一片,而人间却孕育着无尽的传奇。陈塘关,这个被山海环绕的古城,再一次成为了世人瞩目的焦点。风起云涌间,一个关于哪吒的传奇故事再次拉开序幕,这一次,他不再是那个孤军奋战的孩童,而是携手敖丙,共同面对命运的挑战。电影《哪吒之魔童闹…

帆软单元格换行

在Oracle查询数据时,使用函数WM_CONCAT函数把数据拼成 “A,B,C”格式时,在报表展示中如果在同一个单元格中展示就会显得很拥挤。所以就想通过“,”来实现单元格中换行显示。使用场景 每一行显示一个患者信息,同时该患者的多个诊断、手术等。REPLACE($$$,,,\n)也可参考帆软指…

底层开发必备技能:C#中的位运算

底层开发必备技能:C#中的位运算 在编程的世界里,位运算是程序员掌握底层开发和优化性能的利器。对于那些需要处理二进制数据、优化算法或进行底层操作的开发者来说,理解并熟练使用位运算符是必不可少的技能。本文将详细介绍C#中的位运算符及其应用场景,帮助你更好地理解和运…

关于NVIDIA控制面板无法调节颜色设置

1.排除了显卡驱动过旧的情况具体操作:下载DDU将老版本驱动删除,再从英伟达官网(后缀为.cn)根据自己电脑下载对应型号的驱动,自定义安装——执行清洁安装结果:无效 2.排查系统设置与更新具体操作:用管理员权限打开CMD,依次运行sfc /scannow        DISM /Online…

P1220关路灯双log

加强版。课上讲到的经典例题,以下的时空 \(\mathcal O(n\log^2 V)\) 做法(\(V\) 为路灯位置值域)理论上是人尽皆知的,但是全网搜不到这么搞的题解,估计是这题太久远了。传统区间 DP 无法规避两维状态的问题在于,每次折返/拓展时要用新增时间计算两侧灯消耗的额外能量。考…

Xshell 8 Build 0066绿色特别版发布:功能强大且永久免费使用

软件介绍 Xshell 8 Build 0066 绿色特别版是一款强大且实用的远程连接与管理工具集。Xshell 本身就是备受赞誉的 Linux 远程连接工具,以及强大的 SSH 终端管理器,能帮助用户轻松管理远程服务器。而这个绿色特别版在原版基础上进行了深度优化和处理,由 zdBryan 精心打造。它基…