4.3 颜色分离模块

4.3.1颜色空间

颜色空间又名彩色空间,在对物体进行颜色识别时,选择合适的颜色空间很重要。常用的颜色空间模型有RGB、YUV、HSV、CMY和HSI等,其中最基本而且最常见的颜色空间为RGB颜色空间。该文主要使用RGB和HSV2个颜色空间模型来研究电线的颜色识别。

RGB分别代表光谱的三原色,即红、绿、蓝,RGB颜色空间不仅易于映入其他颜色空间中,而且可以与它们相互转换,易受光线影响、不直观性、且3个颜色分量相互关联是RGB颜色空间的缺点所在。RGB颜色空间的三维模型如下图

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

饱和度S:表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V:明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。

HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。

且已有前人通过实验计算出大致颜色的各分量范围,便在此基础上调试

4.3.2 RGB色彩空间转HSV色彩空间

原理:

通过调用cv2库中的cvtColor方法将RGB的原图转化成HSV图

代码段:

hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)

处理结果:

RGB下的ROI

HSV下的ROI

4.3.3 颜色分离

原理:

通过对HSV色彩空间的理解和HSV色彩表下,调试出四个颜色区间用于分离绿色、蓝色、橙色、褐色

绿色:H分量:35-77    S分量:43-255   V分量:46-255

蓝色:H分量:100-124  S分量:43-255   V分量:46-255

橙色:H分量:11-25    S分量:100-255  V分量:150-255

褐色:H分量:0-10     S分量:43-255   V分量:46-255

处理结果:

RGB下的ROI

绿色区间下的ROI

蓝色区间下的ROI

橙色区间下的ROI

棕色区间内下的ROI

4.3.4 颜色点统计

原理:

由于橙色和褐色在HSV色域中不能完全分离,且四条白线掺杂着其他四种颜色,不能完全分离出八条颜色,固采用对线条轮廓内的像素点符合相应颜色区间内像素点的个数,个数多的线的轮廓为纯色,否则为相应的白线,并且先识别出橙色的两条线之后,再识别褐色的两条线,从而实现橙色和褐色的分离。最后将八条线的顺序:白橙、橙、白绿、蓝、白蓝、绿、白褐、褐的结果显示在原图上如下图所示

控制台打印出的颜色点统计列表

首先识别绿色,得出两个最大值的线的轮廓之后,数值最大的轮廓为纯色,否则为相应的白色,如green列表中,最大值为148,此线条轮廓为绿色,次大值为71,此线条轮廓为白绿色,下次遍历时便剔除这两条线的轮廓,以此循环直至识别完八条线。

def calColPbl(self, roi, box, color):x,y,w,h = boxcount = 0if color == 'green':for i in range(w):for j in range(h):if (self.low_green[0] < roi[y+j,x+i,0] < self.high_green[0]) and \(self.low_green[1] < roi[y+j,x+i,1] < self.high_green[1]) and \(self.low_green[2] < roi[y+j,x+i,2] < self.high_green[2]):count = count + 1if color == 'blue':for i in range(w):for j in range(h):if (self.low_blue[0] < roi[y+j,x+i,0] < self.high_blue[0]) and \(self.low_blue[1] < roi[y+j,x+i,1] < self.high_blue[1]) and \(self.low_blue[2] < roi[y+j,x+i,2] < self.high_blue[2]):count = count + 1if color == 'orange':for i in range(w):for j in range(h):if (self.low_orange[0] < roi[y+j,x+i,0] < self.high_orange[0]) and \(self.low_orange[1] < roi[y+j,x+i,1] < self.high_orange[1]) and \(self.low_orange[2] < roi[y+j,x+i,2] < self.high_orange[2]):count = count + 1if color == 'brown':for i in range(w):for j in range(h):if (self.low_brown[0] < roi[y+j,x+i,0] < self.high_brown[0]) and \(self.low_brown[1] < roi[y+j,x+i,1] < self.high_brown[1]) and \(self.low_brown[2] < roi[y+j,x+i,2] < self.high_brown[2]):count = count + 1return count
def colorDetection(self, raw_img, roi, boxes):if len(boxes) != 8:return Falsehsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)# # hsv_roi = cv.GaussianBlur(hsv_roi, (5,5), 0)cv.imshow('hsv',hsv_roi)for color in self.color_detect:cal_result = []cal_result = [self.calColPbl(hsv_roi, box, color) for box in boxes]max_index = cal_result.index(max(cal_result))cal_result[max_index] = 0smax_index = cal_result.index(max(cal_result))if max_index == smax_index:return Falsemax_box = boxes[max_index]smax_box = boxes[smax_index]boxes.remove(max_box)boxes.remove(smax_box)max_str = eval('self.'+str(color))smax_str = eval('self.'+str(color)+'_w')image = cv.putText(raw_img, max_str, (182+max_box[0],155+max_box[1]), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)image = cv.putText(raw_img, smax_str, (182+smax_box[0],155+smax_box[1]), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)return True

处理结果:

最终识别结果

基于opencv python 的网线线序识别(三)相关推荐

  1. 基于OpenCV的 SVM算法实现数字识别(四)---代码实现

    三.基于SVM算法实现手写数字识别 作为一个工科生,而非数学专业的学生,我们研究一个算法,是要将它用于实际领域的.下面给出基于OpenCV3.0的SVM算法手写数字识别程序源码(参考http://bl ...

  2. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

  3. 基于OpenCV的实时车道线分割&车道保持系统(源码&教程)

    1.研究背景 汽车主动安全系统能够实现风险的主动预防和规避,其能有力缓解当前我国汽车交通事故频发的困境,故对其的相关研究得到了国家的大力支持. 车道保持辅助系统(LKAS,Lane Keeping A ...

  4. 【毕业设计_课程设计】基于opencv、dilb的员工人脸识别考勤系统

    文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 效果展示 5 实验心得 6 项目源码 7 最后 0 项目说明 基于opencv.dilb的员工人脸识别考勤系统 提示:适合用于课程 ...

  5. 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战

    基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕 前言 运行python环境 ...

  6. 基于Opencv的开源的中文车牌识别系统

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于Opencv的开源的中文车牌识别系统. 二.实现功能 车牌定位 车牌判断 车牌监测 字符分割 字符鉴别 字符识别 车牌识别 车牌抽象 训练车牌识 ...

  7. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

  8. 网线线序排列以及八字口诀

    普通网线线序一般都是按照橙白.橙.绿白.蓝.蓝白.绿.棕白.棕这个顺序排列的,也就是568B线序标准.而通常情况下百兆网络自用到其中的四根线,若是只有四根线的,则任选四根,做线时对应水晶头的1.2.3 ...

  9. 网口压线顺序_网线线序排列以及八字口诀

    网线线序排列以及八字口诀 普通网线线序一般都是按照橙白.橙.绿白.蓝.蓝白.绿.棕白.棕这个顺序排列 的,也就是 568B 线序标准.而通常情况下百兆网络自用到其中的四根线,若是只有四根线 的,则任选 ...

  10. opencv 训练人脸对比_【项目案例python与人脸识别】基于OpenCV开源计算机视觉库的人脸识别之python实现...

    " 本项目是一个基于OpenCV开源库使用python语言程序实现人脸检测的项目,该项目将从[项目基础知识](即人脸识别的基本原理).[项目实践](人脸识别所需要的具体步骤及其python程 ...

最新文章

  1. 树莓派4B装载ROS系统启动摄像头
  2. wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例
  3. python data analysis | python数据预处理(基于scikit-learn模块)
  4. 【作品发布】QQ2008远程自助 1.5.1.1
  5. android opencv 识别文字_基于SpringBoot的车牌识别系统(附项目地址)
  6. 我常用的python函数(part2)--executemany方法
  7. python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式
  8. index mysql_mysql 原理~ index的详解
  9. python网络爬虫学习笔记(六):Requests库的使用
  10. 堆密度测定的意义_堆密度的意义是什么 汇美科LABULK 0335
  11. 显卡无法为此计算机,如何解决win10系统电脑中无法安装intel显卡驱动的问题
  12. 安卓手机连接Mac电脑可用的管理工具:Android File Transfer
  13. win7+VS2015+OpenCV3.20的搭建
  14. requests框架详解
  15. 树莓派之无屏幕下发现树莓派IP方法
  16. linux下Local Adress(本地ip:端口)和Foreign Address(外部ip:端口)
  17. jmeter查看平均响应时间_Jmeter查看QPS和响应时间随着时间的变化曲线
  18. 数据与广告系列二十一:关于品牌广告,奔涌吧后浪
  19. 关于微信小程序的image的默认样式
  20. UG NX 12 导入文件

热门文章

  1. dede服务器建站_织梦建站之本地服务器怎么装,怎么部署
  2. 2012服务器系统有什么版本的,Windows server 2012操作系统有哪几个版本
  3. IIS6 伪静态 IIS文件类型映射配置方法 【图解】
  4. win10开机启动ps1脚本
  5. 为什么面向对象糟透了?
  6. 链路聚合Eth-Trunk
  7. 【2023秋招面经】兴业数金面试总结
  8. Web爬虫|入门教程之爬虫简介
  9. 镁光 鸡血模式 linux,所以,镁光1100到底是不是全盘slc的模式?之前就几个帖子...
  10. 球定位实景导航 iOS实用应用周排行