Color Tracking by OpenCV-python

最近,初学OpenCV-python,参考资料,做了一个简单的基于颜色识别的学生证追踪程序,与大家分享如下:

 程序主要由三部分构成:

一,摄像头的初始化与采集图像

 二,图像处理算法

 三,录制视频

程序如下:

(1)打开我的PyScripter编辑器,导入一些必要的包:cv2 是 Opencv 包;numpy 是 矩阵运算相关的包

>>>import cv2

>>>import numpy as np

(2)开启摄像头并配置好相关参数,为图像的采集与保存做准备

>>>cap = cv2.VideoCapture(0)

>>>fourcc = cv2.cv.CV_FOURCC("D", "I", "B", " ")

>>>out = cv2.VideoWriter( 'StudentID_Tracking.avi', fourcc,  20,  (640,480)  )

做好准备工作后,开始进入正题,即一个实时跟踪颜色并显示的大循环。我们尝试着用 OpenCV 包中的 cv2.inRange() 函数来识别hsv空间下的指定颜色。该函数需要输入三个参数。

参数1是待处理的图像变量;

参数2是指定颜色的hsv下限值;

参数3是指定颜色的hsv上限值;

函数返回值是处理后的二值图像。

(对于HSV颜色空间与RGB颜色空间的相关知识,可以参考以下链接)

通过 cv2.cvtColor() 函数可以将指定图像转换到指定的颜色空间。该函数需要输入两个参数。

参数1是待处理的图像变量;

参数2是指定转换到相应的颜色空间;

函数返回值是转换后的图像变量。

原图像与转换后的图像如下所示:

从两幅图像的对比结果上看,很显然,由于受到光线,杂色等的影响,颜色识别的效果并不理想,那么,我们尝试着用一些简单的形态学处理方法来解决这个问题。

首先,我们可以尝试先通过简单的腐蚀运算来消除多余的细小的噪声点。

>>>mask = cv2.erode(mask, None, iterations=2)

接着,通过膨胀运算来消除各个分散区域之间的细小缝隙。

>>>mask = cv2.dilate(mask, None, iterations=7 )

最后,再用简单的腐蚀运算来尽可能的还原色块的本来形状和大小。

>>>mask = cv2.erode(mask, None, iterations=5)

以下是形态学方法处理前后的图像对比:

当然,如果还有一种叫轮廓近似的方法,当你由于各种原因,所想要采集的图像区域并不是一个规则的图像,而存在着或多或少,或深或浅,或大或小的毛刺,那么可以尝试用这种方法还原一个近似的规则形状。相关的函数有 cv2.approxPolyDP() ,有兴趣的朋友可以尝试一下。

处理后的二值化图像方便我们进行轮廓的提取。需要用到的函数是 cv2.findContours() 。该函数需要输入三个参数。

参数1是待处理的图像变量;

参数2是指定轮廓的检索模式;

参数3是指定轮廓的近似方法;

该函数返回两个值,1是轮廓本身,2是每条轮廓对应的属性。

>>>cnts = cv2.findContours( mask.copy(), cv2.RETR_CCOMP,

cv2.CHAIN_APPROX_SIMPLE)[-2]

当识别到轮廓时,我们通过寻找最大的轮廓来消除噪声干扰,以确保识别的准确性。

>>>c = max( cnts, key = cv2.contourArea )

通过以下两条语句,计算所勾勒轮廓的质心。

>>>M = cv2.moments( c )

>>>center = ( int ( M[ "m10" ] / M[ "m00" ] ), int ( M[ "m01" ] / M[ "m00" ] ) )

在质心位置画出一个蓝色的实心圆点。

>>>cv2.circle( background, center, 5, ( 255, 0, 0 ), -1 )

至此,我们已经完成了本程序最核心的部分。

不要忘了,我们还要录屏:

>>>out.write( background )

录制出来的视频在文末。

最后,我们仍需要再做一些收尾工作:通过按下键盘上的 ‘ q ’ 键退出大循环。

>>>key = cv2.waitKey(1) & 0xFF

>>>       if key == ord("q"):

>>>              break

同时要释放摄像头和销毁窗口。

>>>cap.release()

>>>out.release()

>>>cv2.destroyAllWindows()

至此,一个基于颜色识别的学生证追踪程序已经完成。

在编写这个程序的过程中,我还编写了两个小工具。主要可以帮助我们确定指定颜色区域的hsv值上限和hsv值下限。

下面分别介绍一下这两个小工具:

(1)抠图工具:运用此工具,再图像界面上,按下左键取起始点后松开,通过移动鼠标可以拉出一个矩形,按下右键后可以确定矩形的边框,从而抠出一个指定的矩形区域,并返回该区域的hsv的上限值与下限值。

在该文件目录下输入以下两行代码,即可弹出图像界面。

>>>import Detectcolor2hsv

>>>Detectcolor2hsv.detectcolor2hsv( 'opencvlogo.jpg' )

效果图如下(左边边框内为截取的图形,右边为输出结果):

(2)hsv画板:玩一下此画板,可以加深你对hsv颜色空间的理解,同时,也有利于确定hsv值。

在该文件目录下输入以下两行代码,即可弹出画板:

>>>import Color_palette_HSV

>>>Color_palette_HSV.color_palette_HSV()

效果图如下:打开开关,滑动 H,S,V 三个滑条,就可看到下方的颜色界面有明显变化。如下图所示(HSV为( 0, 255, 255)时,颜色为鲜红色),按下  ‘ Esc ’ 键退出 :

当然这两个只是小工具,起到帮助作用,实际的颜色一般都需要试调。

这两个小工具的代码也比较简单,我就不一一介绍。

以上都是我的拙见,如果有什么错误的地方或者改进的地方,欢迎留言。

参考链接:http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/

参考书籍:《opencv-python-tutroals》


StudentID_Tracking
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容