当前位置: 首页 > news >正文

openmv 学习笔记(24电赛笔记)

寻找特定目标

        这个功能主要应用在,机器人寻找色块,无人机跟踪特定颜色,生产线上检测物体进行分类,还有人机交互等等功能应用。

相关函数  

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)

        这个函数在openmv中是用来查找颜色块的函数,通过阈值检测图像中的颜色块,完成之后返回列表,列表中包含所有检测到的颜色块。

thresholds参数

        这个参数用来确定检测什么颜色,每个颜色阈值为一个元组,使用LAB颜色表示颜色阈值范围,(L_min ,L_max , A_min , A_max , B_min ,B_max),要检测什么颜色,就要填什么颜色的颜色阈值。

import sensorsensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)thresholds = [(30,100,15,127,15,127)]while (True):image = sensor.snapshot()red_blobs = image.find_blobs(thresholds)

       但是这个参数需要注意的是,thresholds参数是一个列表(list),里面元素是需要检测,颜色的元组组成的, 如果没有定义对,就会报错了。

        上面的代码,检测红色,但是对返回列表没有什么操作,也就视频上没有什么显示。

roi参数

        这个参数用来设置感兴趣的区域,或者说只检测的区域,区域之外的颜色不检测,roi =  [x ,y, w, h]   四个参数起始x y 检测区域宽度 w   检测区域高度 h ,使用代码检测左半区的红色,同时框选出来。

import sensor, image# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA)  # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565)  # 设置像素格式为RGB565
sensor.skip_frames(time=2000)  # 跳过一些帧,使设置生效# 定义颜色阈值 (这里假设要检测红色区域)
thresholds = [(30, 100, 15, 127, 15, 127)]# 定义左边ROI
left_roi = [0, 0, 160, 240]  # 定义图像左半部分的感兴趣区域while True:img = sensor.snapshot()  # 捕捉图像# 在左边ROI中寻找颜色块red_blobs = img.find_blobs(thresholds, roi=left_roi, pixels_threshold=200, area_threshold=200, merge=True)# 如果找到颜色块if red_blobs:for blob in red_blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color=(255, 0, 0))  # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color=(255, 0, 0))  # 红色十字print("Red blob found at: (%d, %d) with area %d" % (blob.cx(), blob.cy(), blob.area()))img.draw_rectangle(left_roi,color = (255,0,0))  #将检测区域使用红色框选出来

        上面的代码因为设置了roi,所以值检测左半部分区域内的红色,有半部分的红色不检测,同时检测出红色使用,十字和画框进行标出,显示。

x_stride参数

        这个参数用来设置,在调用find_blobs函数,指定水平方向上,搜索颜色块的步长,设置为1每个像素都检查,设置为2每隔一个像素进行检查是检测颜色最小宽度的设置,这个参数设置可以帮助,减少处理时间,通过跳过一些参数。

        同时如果不配置默认为2

y_stride参数        

       用来查找y方向上的最小宽度像素,默认为1,如果设置为8,是检测颜色最小长度的设置,如果设置为8,就是只检测8个像素以上的,需要检测的颜色。

invert 参数

        这个参数用来翻转阈值,检测颜色是thresholds,如果加入这个参数会检测,除设定检测颜色以外的所有颜色,两个取值 True  False  前者开启翻转。

area_threshold面积阈值

        参数用来设置,检测颜色的最小面积阈值,出现检测颜色,同时检测颜色超过这个阈值,不会被过滤出去,否则将会过滤出去。

pixels_threshold像素阈值

        像素阈值参数,同样的像素个数小于这个值会被过滤出去,不会被检测。

merga参数

        当检测颜色块重叠的时候,会自动合并颜色块,当设置为True的时候,不论是检测多个颜色块,还是单个颜色块,当检测颜色被分为多个小块的时候,merga这个参数可以合并为整体。

        如果检测多个颜色,且颜色在图像中出现重叠,merga = True 这个参数会将,图像合并,为一个颜色块无论这些颜色是否相同。

import sensor, image, time# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA)  # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565)  # 设置像素格式为RGB565
sensor.skip_frames(time=2000)  # 跳过一些帧,使设置生效# 定义颜色阈值 (假设要检测红色和蓝色区域)
red_thresholds = (30, 100, 15, 127, 15, 127)
blue_thresholds = (0, 30, -128, 0, -128, 0)
thresholds = [red_thresholds, blue_thresholds]# 创建一个时钟对象来跟踪帧率
clock = time.clock()while True:clock.tick()  # 跟踪FPSimg = sensor.snapshot()  # 捕捉图像# 在图像中寻找颜色块,设置merge为Trueblobs = img.find_blobs(thresholds, pixels_threshold=200, area_threshold=200, merge=True)# 如果找到颜色块if blobs:for blob in blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color=(255, 0, 0))  # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color=(255, 0, 0))  # 红色十字print("Blob found at: (%d, %d) with area %d" % (blob.cx(), blob.cy(), blob.area()))print("FPS: %f" % clock.fps())  # 打印FPS

        检测红色和蓝色,当红色和蓝色出现重叠的时候,会自动合并为一起。

        到此这个函数的多有参数详解就描述完了,在调用函数的时候,参数如果没有填写,那么就会使用默认值进行调用,最少参数只使用检测颜色的LAB值,就可以完成调用。

#函数返回对象属性

        前面有提到过,find_blobs()函数是有返回对象的,这个返回对象是一个列表,列表里面的成员变量是表示单个颜色块的对象 ,这些对象是有属性和函数,也就是说,列表里面的对象可以调用函数进行操作。      

        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)。如果色块类似一个铅笔,那么这个值为0~180°。如果色块是一个圆,那么这个值是无用的。如果色块完全没有对称性,那么你会得到0~360°,也可以通过blob[7]来获取。

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

import sensor, image, time# 初始化摄像头
sensor.reset()
sensor.set_framesize(sensor.QVGA)  # 设置帧大小为QVGA (320x240)
sensor.set_pixformat(sensor.RGB565)  # 设置像素格式为RGB565
sensor.skip_frames(time=2000)  # 跳过一些帧,使设置生效# 定义颜色阈值 (假设要检测红色区域)
thresholds = [(30, 100, 15, 127, 15, 127)]# 创建一个时钟对象来跟踪帧率
clock = time.clock()while True:clock.tick()  # 跟踪FPSimg = sensor.snapshot()  # 捕捉图像# 在图像中寻找颜色块blobs = img.find_blobs(thresholds, pixels_threshold=200, area_threshold=200, merge=True)# 如果找到颜色块if blobs:for blob in blobs:# 绘制矩形和十字标记img.draw_rectangle(blob.rect(), color=(255, 0, 0))  # 红色矩形img.draw_cross(blob.cx(), blob.cy(), color=(255, 0, 0))  # 红色十字# 输出颜色块的属性信息print("Blob found at:")print("  Coordinates: (x=%d, y=%d)" % (blob.cx(), blob.cy()))print("  Area: %d" % blob.area())print("  Rectangle: (x=%d, y=%d, w=%d, h=%d)" % blob.rect())print("  Pixels: %d" % blob.count())print("  Density: %f" % blob.density())print("  Rotation: %f" % blob.rotation())print("  Major Axis Line: %s" % str(blob.major_axis_line()))print("  Minor Axis Line: %s" % str(blob.minor_axis_line()))print("  Compactness: %f" % blob.compactness())print("  Elongation: %f" % blob.elongation())print("FPS: %f" % clock.fps())  # 打印FPS

                欢迎指正,希望对你,有所帮助!!!

相关文章:

openmv 学习笔记(24电赛笔记)

寻找特定目标 这个功能主要应用在,机器人寻找色块,无人机跟踪特定颜色,生产线上检测物体进行分类,还有人机交互等等功能应用。 相关函数 image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…...

【C语言】【数据结构】二分查找(数组的练习)

目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 (1)查找3(数组里面存在的数) (2)查找12(数组里面不存在的数) 三、代码实现 四、计算mid公式的优化 一、…...

Web:Url 编码 -13

URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题,提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符,进行转换 先将字符按照指定码表…...

typescript 引用数据类型

let arr1: number[] [1, 2, 3]; // 规定为数组数字 let arr2: (number | string)[] ["1", 2, 3]; // 数字或字符串 |就代表联合类型 也称元组 let arr3: [null, string] [null, "1"]; // 必须两个值:null和字符串 let arr4: […...

OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子,通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子,能够有效地突出图像中的高频变化区域,即边缘。 二、…...

上传Git 仓库 勤勉git (超详细教程)

注册 官网: 我就喜欢动个仓库名字和分支名字 就创建了...

C/C++基础:宏

C/C基础:宏 简述宏的简单使用基础语法带参宏(宏函数)宏参字符串化#宏拼接## 宏的陷阱多行定义宏中的空格宏函数不是函数行末分号问题一些建议 宏的奇妙使用 简述 宏作为C/C最有特色的语言性质之一,犹如魔法一般,合理的…...

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

一文带你掌握C++虚函数·和多态

9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数,只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...

OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考

参考:https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV:https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog:开源用户行为分析框架,让数据分析更轻松 在数据驱动的时代,找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了,开源免费的 ClkLog 就是你的不二选择!本文将为你详细介绍 ClkLog 的功能特点、技术架…...

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...

面试题:如何验证代码的可靠性

代码结构上的: 1 可扩展性 是否否和开闭原则 2 性能,数据结构用的是否合理,算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中,前端开发一直扮演着至关重要的角色,它连接着用户与产品之间的桥梁。然而,随着技术的不断进步和社会经济环境的变化,前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小?在数字化洪流席卷的当下,PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路,它们不仅贪婪地吞噬着宝贵的存储空间,更如沉重的枷锁,拖曳着我们的工作进度,步入迟缓之境,试…...

leetcode-148. 排序链表

题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3&#x…...

16 html网页服务和nginx服务

第十六次7.29 1.静态页面 1安装httpd [rootweb ~]# yum -y install httpd 2.真机访问页面 [rootweb html]# echo "静态html文件" > index.html 传入照片再次访问 静态资源,根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧,初级的玩法是在一个9*9的棋盘上找到没有雷的格子,而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...

算法入门:Java实现排序、查找算法

链接:算法入门:Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)...

【初阶数据结构篇】顺序表的实现(赋源码)

文章目录 本篇代码位置顺序表和链表1.线性表2.顺序表2.1 概念与结构2.2分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.3.1动态顺序表的初始化和销毁及打印2.3.2动态顺序表的插入动态顺序表的尾插动态顺序表的头插动态顺序表的在指定位置插入数据 2.3.3动态顺序表…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...