颜色追踪

实现效果

Red_Track

实现流程

  • 选中目标色块
  • 将色彩格式调换为 LAB Color , 下拉菜单, 选中即可
  • 记录LAB 三者的最大值(MAX) 与 最小值(MIN)
  • 将LAB的取值范围设置为阈值 (threshold)
  • 将阈值传入find_blobs函数中, 根据需求设定像素点与矩形面积等阈值约束

Red_Track_Setting

利用Threshold Editor 进行色块的阈值设定

你截好图之后,threshold editor 会根据你截取的色块部分的颜色范围, 设定一个初始值, 然后你再它的基础上调整

Threshold Editor 打开流程

工具 Tool -> 机器视觉 Machine Vison -> 阈值编辑器 threshold editor

方便调参用, 拖动滑块, 来得到比较理想的效果, 然后再把threshold放到代码里面

图形绘制函数

 矩形绘制

/*
*  x: 矩形的左上角  x坐标
*  y:矩形的左上角 y坐标
*  width:矩形的宽度
*  height: 矩形的高度
*/
image.draw_rectangle([x, y, width, height])

十字绘制

/*
*  x: 十字的x坐标
*  y: 十字的y坐标
*/
image.draw_cross(x, y)

find_blobs函数

find_blobs(thresholds, invert=False, roi=Auto)

TODO 对find_blobs做一下详细的说明

thresholds 颜色阈值 元组数组

invert=1 反转颜色阈值,invert=False默认不反转.

roi 设置颜色识别的视野区域,roi是一个元组, roi = (x, y, w, h),代表从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。

Blob 对象

{x:26, y:54, w:83, h:38, pixels:448, cx:65, cy:75, rotation:0.342305, code:1, count:1}
序号 名称 备注
0 x 代表矩形区域的左上角的x坐标
1 y 代表矩形区域的左上角的y坐标
2 w 矩形区域的宽度
3 h 矩形区域的高度
4 pixels 目标区域满足图像阈值范围的像素点的个数
5 cx center x, 矩形区域中心的x坐标
6 cy center y, 矩形区域中心的y坐标
7 rotation 代表目标颜色区域blob的旋转角度
8 code 代表颜色的编号, 它可以用来分辨这个这个矩形区域是用哪个threshold识别出来的
9 count blob内包含的子blob个数。

注:

rotation 单位是弧度值,如果识别的物体是长条状的,例如钢笔, 那其取值范围为0-180度,如果是圆形的画, 其rotaiton值没有任何意义。

code 颜色编号 取值范围 2^n : 1,2, 4, 8

count 如果merge=False count恒等于1, 如果开启色块合并merge=True 则>=1

Source Code

我们的代码是在官方例程下做的改动

# Blob Detection Example
#
# This example shows off how to use the find_blobs function to find color
# blobs in the image. This example in particular looks for dark green objects.

import sensor, image, time

# For color tracking to work really well you should ideally be in a very, very,
# very, controlled enviroment where the lighting is constant...
red_threshold_01 = (0, 35, 0, 50, -10, 40)

#设置红色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,
# maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需
#设置(min, max)两个数字即可。

# You may need to tweak the above settings for tracking green things...
# Select an area in the Framebuffer to copy the color settings.

sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False)
#关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。
clock = time.clock() # Tracks FPS.

while(True):
    clock.tick() # Track elapsed milliseconds between snapshots().
    img = sensor.snapshot() # Take a picture and return the image.
    #  pixels_threshold=100, area_threshold=100
    blobs = img.find_blobs([red_threshold_01], area_threshold=150)

    if blobs:
    #如果找到了目标颜色
        print(blobs)
        for b in blobs:
        #迭代找到的目标颜色区域
            # Draw a rect around the blob.
            img.draw_rectangle(b[0:4]) # rect
            #用矩形标记出目标颜色区域
            img.draw_cross(b[5], b[6]) # cx, cy
            #在目标颜色区域的中心画十字形标记


    print(clock.fps()) # Note: Your OpenMV Cam runs about half as fast while
    # connected to your computer. The FPS should increase once disconnected.
Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2019-04-06 01:15:03

results matching ""

    No results matching ""