【openmv学习笔记:1】色块查找

这篇具有很好参考价值的文章主要介绍了【openmv学习笔记:1】色块查找。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(一)显示图像

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

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

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

import sensor, image, time # 引入感光元件模块sensor

sensor.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寻找色块,学习,python
我们可以在右上角看到摄像头拍摄到并传输回来的画面。
可以在Openmv涂上导热硅胶和装上散热塔进行散热,因为用起来确实很烫
openmv寻找色块,学习,python

(二)标记色块

我们需要用到颜色识别的函数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, math

threshold_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_thresholds

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()

# 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寻找色块,学习,python文章来源地址https://www.toymoban.com/news/detail-635417.html

到了这里,关于【openmv学习笔记:1】色块查找的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenMV4 基于色块识别的图形+颜色+坐标识别代码(micropython)

    Hello大家好,最近竞赛需要开始研究OpenMV4,今天和大家分享一段基于 色块识别的图形+颜色+坐标识别代码 ,实测准确率高于90%哦,当然,需要在光线和距离都合适的情况下使用(假如你的识别结果不尽如人意,可以自行调节颜色阈值和目标与摄像头的距离),下面,话不多说

    2024年02月15日
    浏览(30)
  • 学习笔记:在Anaconda环境下装Pytorch,pillow,numpy等库并寻找适配的Python版本

    目录 1.在Anaconda Prompt创建新环境 2.去pytorch官网上查找环境中Python所对应的pytorch版本并下载相关包 查询电脑独立NVIDIA显卡所适配的CUDA版本 CUDA版本查询 3.部分库版本的安装与修改  本人在Anaconda下创建的新环境为 python 3.7.0 pytorch 1.8.0 pillow 9.5.0 numpy 1.21.5 能够正常运行 如果我这

    2024年02月07日
    浏览(26)
  • 学习笔记:在Anaconda环境下装Pytorch,CUDA,pillow,numpy等库并寻找适配的Python版本

    目录 1.在Anaconda Prompt创建新环境 2.去pytorch官网上查找环境中Python所对应的pytorch版本并下载相关包 查询电脑独立NVIDIA显卡所适配的CUDA版本 CUDA版本查询 3.部分库版本的安装与修改  本人在Anaconda下创建的新环境为 python 3.7.0 pytorch 1.8.0 pillow 9.5.0 numpy 1.21.5 能够正常运行 如果我这

    2024年02月05日
    浏览(36)
  • opencv/openmv学习笔记

    首先区分CV与MV: OpenCV是一个开源视觉库,不包括硬件;而OpenMV则是一个硬件和软件搭配的摄像头小型模块。 python配置: 下载好适合的python版本:https://www.python.org/doc/versions/zh-cn/ 下载PyCharm:https://www.jetbrains.com/pycharm/promo/anaconda/ 在PyCharm中安装“opencv-python”与“opencv-contrib

    2024年02月13日
    浏览(28)
  • 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 MVS(多视点立体视觉,Multi-view stereo)能够单独从图像中构造出高度细节化的3D模型,采集一个庞大的图像数据集,用其来构建出一个用来解析

    2024年01月15日
    浏览(34)
  • 【算法】在二维不单调的矩阵上二分查找——力扣1901. 寻找峰值 II

    1901. 寻找峰值 II 给定一个从0开始编号的m x n矩阵 mat ,其中任意两个相邻格子的值都不相同。峰值是指那些严格大于其相邻格子(上、下、左、右)的元素。需要找出任意一个峰值 mat[i][j] 并返回其位置 [i, j] 。 示例 1: 示例 2: 步骤一:列转行 首先,将矩阵的列转换为行,表示为

    2024年02月03日
    浏览(40)
  • verilog 学习笔记(3)输入查找表(LUT)

    今天做了一个关于输入查找表(LUT)的题目,里面关于8-1 MUX的处理方式让我觉得非常的新奇。 题目很简单,大意就是要求设计一个8位的移位寄存器,同时附加随机访问功能。也就是通过输入的ABC三个数字对应的二进制数转换为一个地址(很像存储中的方式),然后访问移位

    2024年02月13日
    浏览(29)
  • 算法设计与分析学习笔记之二分查找算法

    二分查找只适用于有序的顺序表,非严格递增或是非严格递减都行。 二分查找运用到了分治的思想,将整体逐渐分为许多个小的部分,让整体的解变为诸多小部分解的合成,要求整体可以分解,小部分的解汇合之后可以得到整体部分的解。 至此,结束。 如果你觉得这篇文章

    2024年02月09日
    浏览(38)
  • 【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴 们点赞、关注! class   Solution :      def   mySqrt ( self ,  x :   int )   -   int :       

    2024年02月04日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包