HSV颜色模型

如果我们想找出一副图像中的蓝色部分,我们需要检查rgb分量中的blue分量就可以了。一般blue分量是0-255的值,即便蓝色分量255了,由于另外两个分量的影响,需要考虑各个分量的配比问题,rgb作为颜色判断很难实现,就有了hsv模型hsv,photoshop中hsb

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H

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

饱和度S

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

亮度V

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

在OpenCV中hsv 数据为8UC则取值分别为 0-180 0-255 0-255 ,即蓝色240对应的应该是120

1, 预处理
//src目前是BGR颜色空间,转换成HSV

 Mat hsv;cvtColor(src, hsv, COLOR_BGR2HSV);//imshow("hsv", hsv);

效果

2找蓝色像素:h(100-124),s(43-255),v(46-255)
遍历
获取通道数

 int channels = hsv.channels();int height = hsv.rows;//如下图,宽度变成了列数乘以3int width = hsv.cols * channels;//如果是连续存储,按照1行来处理,如下图,内存地址从0到8为第一行,将下一行看作为一行。if (hsv.isContinuous()) {width *= height;height = 1;}uchar* p;for (int i = 0; i < height; i++){//取第i行的数据p = hsv.ptr<uchar>(i);//每次处理channels个数据,这里j步长为channels,每次都取3个。for (int j = 0; j < width; j += channels) {//获取 h s v 分量int h = p[j];int s = p[j + 1];int v = p[j + 2];//h(100-124),s(43-255),v(46-255)bool isBlue = false;if (h >= 100 && h <= 124 &&s >= 43 && s <= 255 &&v >= 46 && v <= 255) {isBlue = true;}if (isBlue){//凸显蓝色(v分量最大255)p[j] = 0;//hp[j + 1] = 0;//sp[j + 2] = 255;//v}else {//变黑(v分量为0)p[j] = 0;//hp[j + 1] = 0;//sp[j + 2] = 0;//v}}}// end for//imshow("凸显蓝色", hsv);


处理完之后如图:
如果是蓝色的车,可能就识别不了了。

 vector<Mat> hsv_split;split(hsv, hsv_split);//对图像按通道进行分离 , merge()合并//imshow("分离v分量", hsv_split[2]);//v分离

https://blog.csdn.net/u012819339/article/details/82222008

分离 之后如图:

分离分量之后,和sobel一样,进行二值化,闭操作,找轮廓。。。

注意:
之前的是蓝色的,还有一种是黄色的。
//蓝色车牌:字符浅背景深,正二值化
//黄色车牌:字符深背景浅,反二值化

//二值化Mat shold;//THRESH_OTSU 大律法 自适应阈值//THRESH_BINARY 正二值化//THRESH_BINARY_INV 反二值化//蓝色车牌:字符浅背景深,正二值化//黄色车牌:字符深背景浅,反二值化threshold(hsv_split[2], shold, 0, 255, THRESH_OTSU + THRESH_BINARY);//imshow("color二值化", shold);//闭操作Mat close;Mat element = getStructuringElement(MORPH_RECT, Size(17, 3));morphologyEx(shold, close, MORPH_CLOSE, element);//imshow("color闭操作", close);//找轮廓vector<vector<Point>> contours;findContours(close, //输入图像contours, //输出轮廓RETR_EXTERNAL, //外轮廓CHAIN_APPROX_NONE //轮廓上所有像素点);RotatedRect rotatedRect;vector<RotatedRect> vec_color_rects;//遍历并判断矩形尺寸Mat src_clone = src.clone();for each (vector<Point> points in contours){rotatedRect = minAreaRect(points);//带角度的矩形rectangle(src_clone, rotatedRect.boundingRect(), Scalar(0, 0, 255));if (verifySizes(rotatedRect)) {vec_color_rects.push_back(rotatedRect);}}for each (RotatedRect rect in vec_color_rects){rectangle(src_clone, rect.boundingRect(), Scalar(0, 255, 0));}//imshow("color找轮廓", src_clone);//矩形矫正(角度判断,旋转矩形,调整大小)tortuosity(src, vec_color_rects, dst_plates);/*for each (Mat m in dst_plates){//imshow("color定位候选车牌", m);//waitKey();}*/

color二值化:
sobel二值化

sobel闭操作(左)和color闭操作(右边)图对比
显然,color闭操作要好一点。

3 OpenCV 车牌识别-2 颜色定位相关推荐

  1. 【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目

    车牌识别基础功能演示 摘要:车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符.英文字母.阿 ...

  2. opencv车牌识别入门资料汇总

    使用OpenCV和C++实现的车牌识别系统. http://download.csdn.net/detail/u014743238/7204477 使用VC++6.0做开发工具, 采用简单的SDI框架 ...

  3. PyTorch + openCV 车牌识别(一)

    PyTorch + openCV 车牌识别(一) 注意 利用cv识别车牌并切割字符 注意 本项目仅是初学者学习pytorch过程中随手写的,有些地方不够严谨请谅解,仅供参考 利用cv识别车牌并切割字符 ...

  4. Python 基于 opencv 车牌识别系统的研究与实现

    源码下载地址:https://download.csdn.net/download/gdutxiaoxu/87419195 原理简介 车牌字符识别使用的算法是opencv的SVM opencv的SVM ...

  5. 基于 SoC 的卷积神经网络车牌识别系统设计(3-1)基于 Python 编程的车牌识别预处理、定位、分割、缩放的效果一览

    引言         这是一个在基于 OpenCV 的 Python 程序下,整体车牌定位.分割.识别的各个步骤的处理结果的展示,相当于算法的验证,只有先在软件上经过正确的严格的验证,才能进行硬件上的 ...

  6. python的opencv 车牌识别 开源_毕节进出口车牌识别系统怎么样

    毕节进出口车牌识别系统怎么样 gzheu8il 毕节进出口车牌识别系统怎么样 系统拓扑图如下:该系统以社区中心机房为枢纽,有机的将智慧家居住户.社区数字化服务.物业数字化管理.社区智能化管理结合起来, ...

  7. c# opencv车牌识别_毕设有着落了!一套开源的,基于SpringBoot的车牌识别系统

    阅读本文大概需要 4 分钟. 前言 这个项目是良月柒在逛社区时发现的,刚看到它,思绪直接被拉回了几年前,当初有同学的毕设就是停车场管理系统,关键的功能--车牌识别,连硬件都整上了,一整套流程跑下来,p ...

  8. c# opencv车牌识别_opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  9. 基于OpenCV车牌识别及轨迹跟踪

    系统总体设计 本系统主要由三个模块构成分别是:图像采集模块,车牌识别模块和轨迹处理模块. 因为实验条件限制,所以实验时采用一个摄像头拍多个不同时间段的视频,代替多个摄像头的拍摄效果.右图中小矩形框代表 ...

最新文章

  1. Python程序全局观--以温度转换为例
  2. 咕咚技术总监唐平麟:神策使我们的数据平台成本降低约 75%,迭代效率提升 2~3 倍...
  3. 使用Jasmine,Spock和Nashorn测试JVM服务器端JavaScript
  4. Docker 资源限制之内存
  5. leetcode —— 1319. 连通网络的操作次数
  6. 从零开始学Go之并发(四):互斥
  7. CSS中定义多个链接样式,在CSS中定义【导航栏】超链接样式
  8. python3.7 安装pip3_安装python3.7 pip3.7 去哪里了?
  9. VC++动态链接库(DLL)编程(三)――MFC规则DLL
  10. 文件名lin.php是什么,宝塔面板-PHP服务添加‘扩展名=ixed.5.4.lin
  11. ElasticSearch学习(2)-Java接口操作ElasticSearch
  12. 惠普打印机双击之后没有扫描_惠普打印机为什么扫描不了,显示这个,什么意思,怎么处理?急...
  13. 从远景论坛上学到的完美激活NERO8 NERO9的经验
  14. 如何实现前后端分离开发
  15. 机器学习-胯下运球之Naive Bayes<朴素贝叶斯法>
  16. java dcm转bmp源码_DCM文件转图像,并高清处理图像
  17. 2021考研数学汤家凤大纲解析
  18. Docker知识点整理
  19. 常见MIME类型设置方法
  20. Jenkins设置GitLab push事件发生时自动构建

热门文章

  1. 《不公平的优势》——错误的教育/培训观念与金钱观
  2. VB的计划任务的问题
  3. mac上android环境搭建 遇到的问题 Java heap spac
  4. Python 和 PyQt5 实现打地鼠小游戏
  5. virtualbox虚拟机内安装增强功能未能加载虚拟光盘
  6. 手撸架构,网络 面试36问
  7. 读书笔记--《BIM手册》--案例笔记
  8. Arduino超声波测距模块控制蜂鸣器
  9. Sublime Text3中文乱码解决方案
  10. 产品经理如何培养对市场的敏感度和洞察力