Code Monkey home page Code Monkey logo

1zlab / 1zlab_color_block_finder Goto Github PK

View Code? Open in Web Editor NEW
87.0 2.0 34.0 5.85 MB

使用OpenCV实现色块追踪 为了方便大家入门OpenCV以及使用OpenCV实现颜色识别, 阿凯编写了相关的上位机脚本, 同时也有. 刚开始的时候, 你的精力可以放在算法流程上面, 没必要在前期过于关注代码的细节. 脚本的代码阿凯也是逐行注释的, 也可以作为你的项目参考 .

Python 100.00%
opencv hsv python-opencv thresholded-binary color-block-finder

1zlab_color_block_finder's Introduction

OpenCV色块识别-1Z实验室

作者: 阿凯 出品: 1Z实验室(1zlab) Make Things Easy

前言

在OpenCV上实现颜色识别是很多人入门计算机视觉(OpenCV)首先会去学习的算法.

色块识别演示样例

而且颜色识别可以广泛应用于色块追踪, 巡线等机器人项目.
为了方便大家入门OpenCV以及使用OpenCV实现颜色识别, 阿凯编写了相关的上位机脚本, 同时也有. 刚开始的时候, 你的精力可以放在算法流程上面, 没必要在前期过于关注代码的细节. 脚本的代码阿凯也是逐行注释的, 也可以作为你的项目参考 .

备注: 代码兼容Windows, Mac, Ubuntu

目录

1选择ROI区域

桌面上放置着一个瓶盖, 如果我们想识别蓝色瓶盖的话, 第一步就需要截取蓝色瓶盖的蓝色区域的子图(ROI, Region Of Interest, 感兴趣区域).

选择ROI区域代码在01-选择ROI区域文件夹下. 代码演示视频见: 01-选择ROI区域/演示视频

image

python select_roi.py "图片文件路径"

例如:

python select_roi.py demo-pic.png

select roi

截取出来的图像就是这样的.

image_roi

2图像颜色统计HSV

获取了瓶盖的子图之后, 我们就要对图片在HSV颜色空间(color space)下的统计进行可视化的绘制, 从而获取颜色阈值的初步参考范围.

HSV

图像颜色统计HSV在02-图像颜色统计HSV文件夹下. 代码演示视频见: 02-图像颜色统计HSV/演示视频

脚本使用方法

 python img_hsv_stat.py  <图片路径>

应用举例.

 python img_hsv_stat.py image_roi.png

HSV颜色统计样例

观察上面的统计图,我们可以获取到蓝色瓶盖在HSV颜色空间下的分布.

通道(Channel) 最小值(Min) 最大值(Max)
H: Hue 色调/色彩 96 114
S: Saturation 饱和度 210 255
V: Value 明暗 174 216

3颜色阈值动态调节

有了大致的颜色范围还不行, 我们需要借助颜色阈值调节工具去细化, 对阈值进行微调. 阈值的初始设定,按照之前获取的大致范围开始.然后按照阈值进行图像二值化(binary), 满足阈值条件的像素点为白色, 不满足阈值条件的像素为黑色.

HSV颜色阈值动态调节工具 在03-HSV颜色阈值动态调节工具 文件夹下. 代码演示视频见: 03-HSV颜色阈值动态调节工具 /演示视频

HSV颜色阈值调节工具

脚本使用说明

python ThresholdEditorGUIHsv.py + <图片路径>

例如:

python ThresholdEditorGUIHsv.py demo-pic.png

阈值调节目标

调节目标,就是要让目标颜色区域变为白色.

二值化

选中窗口,按E键盘退出程序.

4色块识别

获取到颜色阈值了,我们就可以检索画面中的色块啦.

色块识别 在04-色块识别 文件夹下. 代码演示视频见: 04-色块识别 /演示视频

色块识别

脚本使用方法

运行测试程序test_color_feature.py

python test_color_feature.py

默认是从视频中读入视频流, 并显示识别后的视频.

如果是从图片中读入的话就调整一下代码注释:

if __name__ == "__main__":
    # 测试图片色块识别
    test_color_block_finder_01()
    # 测试视频流色块识别
    # test_color_block_finder_02()

色块识别的核心算法已经封装在color_block_finder.py 里面的color_block_finder 函数中, 函数返回的是Tuple类型的矩形区域. 通过draw_color_block_rect 函数可以绘制画面中的色块.

颜色阈值如果要调整的话, 调整这里:

  • lowerb = (minH, minS, minV)
  • upperb = (maxH, maxS, maxV)
def test_color_block_finder_02():
    '''
    色块识别测试样例2 从视频流中读取并且识别
    '''
    # 视频路径
    video_path = 'demo-video.mkv'
    # 颜色阈值下界(HSV) lower boudnary
    lowerb = (96, 210, 85) 
    # 颜色阈值上界(HSV) upper boundary
    upperb = (114, 255, 231)

宣传海报

1zlab_color_block_finder's People

Contributors

mushroom-x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

1zlab_color_block_finder's Issues

can't run

in color_block_finder
bimg, contours, hier = cv2.findContours(img_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.