目录

  • (一)显示图像
  • (二)标记色块
    • 2.1 `find_blobs`函数
    • 2.2 颜色阈值
    • 2.3 标记

(一)显示图像

星瞳科技openmv官方资料
嵌入式图像处理环境:

  • 硬件平台:OpenMV4 Cam H7 Plus
  • 语言:Micro python
  • 软件:Openmv IDE

首先对摄像头进行一个初始化来显示图像。引入模块sensor

import sensor, image, time # 引入感光元件模块sensorsensor.reset() #初始化感光元件
sensor.set_pixformat(sensor.RGB565) # 设置像素模式# sensor.GRAYSCALE: 灰度,每个像素8bit# sensor.RGB565: 彩色,每个像素16bit
sensor.set_framesize(sensor.QVGA)   # 设置分辨率 QVGA: 320x240
sensor.skip_frames(time = 2000)    # 跳过n张照片,在更改设置后# 跳过一些帧,等待感光元件变稳定。clock = time.clock()               # 跟踪FPS帧率while(True):clock.tick()                   # 追踪两个snapshots()之间经过的毫秒数,可能就是记录运行时间吧img = sensor.snapshot()        # 拍摄一张照片,返回一个image对象print(clock.fps())             # 在终端打印出来帧率


我们可以在右上角看到摄像头拍摄到并传输回来的画面。
可以在Openmv涂上导热硅胶和装上散热塔进行散热,因为用起来确实很烫

(二)标记色块

我们需要用到颜色识别的函数find_blobs和画图函数。

2.1 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)#find_blobs参数介绍
# 第一个参数是一个thresholds列表,其用来设置颜色的阈值
# 第二个参数是设置roi感兴趣区域,既在显示的画面中,在指定坐标规划出一个指定大小的区域来查找色块
# 第三个和第四个参数是设置x方向和y方向上的色块最小像素,即只有像素块数量大于这个阈值的才会标记出来
# 第五个参数为反转阈值,把阈值以外的颜色作为阈值进行查找。False关闭、True开启
# 第六个参数为面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉
# 第七个参数为像素个数阈值,如果色块像素数量小于这个值,会被过滤掉
# 第八个参数为合并。如果开启这会合并所有的blob,无论是什么颜色的。如果你想混淆多种颜色的blob,只需要分别调用不同颜色阈值的find_blobs。
# 第九个参数为边界,如果设置为1,那么两个blobs如果间距1一个像素点,也会被合并。

2.2 颜色阈值

一个颜色的阈值由六个参数构成即 LAB的最大值和最小值,通过设定这六个参数来更改颜色阈值。
LAB颜色模型介绍

thresholds = [(30, 100, 15, 127, 15, 127),  # 红色阈值(30, 100, -64, -8, -32, 32),  # 绿色阈值(0, 30, 0, 64, -128, 0)]      # 蓝色阈值

我们定义了一个thresholds元组,里面有三个元素,每个元素都是一组LAB颜色阈值的列表。
如果我们需要调用不同的颜色阈值 只需要调用这个元组中的某个阈值就行,例如:

thresholds[0] #这是调用元组中的第一个元素、这个元素是一个列表、存放着红色阈值的LAB最大值和最小值

2.3 标记

对于是否找到了自己想要的一个色块、自然需要标记出来,这样才知道自己是否成功识别到这个色块。
官方给出来了一系列绘画函数

# Single Color RGB565 Blob Tracking Example
#
# This example shows off single color RGB565 tracking using the OpenMV Cam.import sensor, image, time, maththreshold_index = 0 # 0为红色,1为绿色,2为蓝色# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green/blue things. You may wish to tune them...
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)] # generic_blue_thresholdssensor.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()# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
# camera resolution. "merge=True" merges all overlapping blobs in the image.while(True):clock.tick()img = sensor.snapshot()for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):# thresholds[threshold_index] 用来元组元组中的元素# These values depend on the blob not being circular - otherwise they will be shaky.if blob.elongation() > 0.5:img.draw_edges(blob.min_corners(), color=(255,0,0))  #color设置绘画出来的颜色img.draw_line(blob.major_axis_line(), color=(0,255,0))img.draw_line(blob.minor_axis_line(), color=(0,0,255))# These values are stable all the time.img.draw_rectangle(blob.rect()) #绘画出一个矩形框img.draw_cross(blob.cx(), blob.cy()) #在指定位置画十字# Note - the blob rotation is unique to 0-180 only.img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)img.draw_string(100,100,'x='+blob.cx(),color=(255,0,0))print(clock.fps())

上面的代码是寻找红色色块并进行标记,绘画出方框和十字、并显示x的坐标。
最终效果如下

【openmv学习笔记:1】色块查找相关推荐

  1. 2019电赛--OpenMV学习笔记

    此文章在我的博客链接:https://sublimerui.top/archives/f10b0e1a.html NOTES:2019电赛结束啦~辛辛苦苦4天后,现已经写成了针对题目的OpenMV总结 ...

  2. spring4.0基于Java配置_Spring MVC学习笔记之Controller查找(基于Spring4.0.3)

    0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...

  3. 数据结构学习笔记(7.查找 8.排序)

    文章目录 第七章 查找 查找--基本概念 顺序查找 折半查找(二分法查找)--重要考点 分块查找 二叉排序树BST 平衡二叉树--AVL--重要考点 平衡二叉树的删除操作 红黑树--RBT 红黑树的插 ...

  4. java学习笔记之折半查找法(二分法)

    2019独角兽企业重金招聘Python工程师标准>>> package Xhe.com; //折半查找法(二分法) public class halfSearch {     pub ...

  5. 【M语言编程学习笔记之一, 查找当前路径下文件】

    代码如下: function [name,path]=FindFiles(InputDir) %查找当前路径下所有文件 %InputDir: 输入路径 %name:输出文件名,cell,路径不合法或者 ...

  6. 【算法学习笔记】二分查找法

    二分查找法 二分查找的本质就是分治法,小时候有过这么一种猜数字的游戏,你在心中想一个大于0小于100的数字,然后我来提问,你只用回答是或者不是,比如"你想的数字比50大吗" 你说不 ...

  7. 【Excel学习笔记12】查找和替换

    一.查找 快捷键:ctrl f 简单说明一下 查找内容:输入自己想要找的内容 范围:工作表.工作簿(这个好理解) 搜索:按行.按列 查找范围:公式.值.批注 单元格匹配: 查找内容为1,搜索就是1,单 ...

  8. Linux学习笔记07_搜索查找类和管道符

    1. 查找文件或目录(find) find [搜索范围] [选项] <根据选项决定> :从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端 常见选项 -name :按文 ...

  9. Linux学习笔记——文件的查找与检索

    文章目录 文件的查找 按照文件名搜索 按照文件大小进行搜索 按照修改时间搜索 按照权限搜索 按照所有者和所属组搜索 按照文件类型搜索 逻辑运算符 其他选项 文件的检索 在当前目录查找 递归查找 反向查 ...

最新文章

  1. vim删除文件所有内容
  2. 影响声音定位的几个因素
  3. JSP文件管理后门工具jsp-file-browser
  4. linux 内核网络协议栈
  5. mybatis14--注解的配置
  6. html怎么显示返回的图片,想要预览文件或是图片,将后端返回的信息转换为前端可以正常显示的格式...
  7. Centos7-卸载自带的jdk 安装jdk8
  8. 【.NET框架】—— ASP.NET MVC5路由基础(五)
  9. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
  10. 安卓应用安全指南 4.3.2 创建/使用内容供应器 规则书
  11. elasticsearch映射相关字段定义,属性定义,及动态映射(marvel插件方式)mapping
  12. 青海大学计算机考研调剂,青海大学2020年硕士研究生招生调剂公告
  13. 末日帝国——Agile公司的困境 (4)
  14. 三菱梯形图转换成c语言,三菱PLC编程软件的梯形图程序的生成与批改
  15. .30-浅析webpack源码之doResolve事件流(2)
  16. 网络安全实验室-脚本关1-15
  17. 台式计算机装机,DIY台式电脑装机教程之新手装机图解!手把手教你组装电脑
  18. python opencv 识别圆角矩形_OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle...
  19. 使用gdb调试出现 No debugging symbols found in a.out
  20. linux使用及shell常用命令技巧

热门文章

  1. 拨码无线网桥的配置+注意事项
  2. 软件测试基础之用例设计方法
  3. lol手游显示服务器关闭,演员惨遭一锅端!LOL手游紧急关闭服务器,端游为啥不学?...
  4. 数字化转型:AI中台如何在企业中落地
  5. linux 操作命令汇总
  6. 【热门】熊猫头比心熊猫头跳舞表情包合集~
  7. Wireshark数据包分析(详细解析)
  8. 高速系统设计自学笔记——信号完整性2
  9. 微信视频号强制置顶朋友圈:盈利不可牺牲用户体验
  10. OpenJudge苹果和虫子2的程序