OPenCV4-颜色识别(一)调色板和简单的颜色识别

使用 OPenCV4 做颜色识别十分简单。本文章使用 python 语言来实现一个调色板和简单的颜色识别。

1.调色板

绘制一个调色板对颜色识别非常有用,当然你也可以使用 PS 等软件自带的调色板,那样会有更好的效果。

调色板的实现原理十分简单,就是通过滑动栏来选择不同的数值,来改变图像画布的颜色。因为在颜色识别中多使用 HSV 颜色空间作为识别阈值判定。所以这个调色板就是通过调节 HSV 空间的 "H"、"S"、"V" 的数值来显示一个 BGR 空间的图像。为什么显示的是 BGR 空间的图像呢?因为一般相机读取的格式都是 BGR 的。所以显示 BGR 空间的图像。总之就是:通过调节 HSV 空间的数值,显示 BGR 空间的图像。代码如下:

 import cv2import numpy as np​def nothing(x):pass​# Trackbarcv2.namedWindow("frame")cv2.createTrackbar("H", "frame", 0, 179, nothing)cv2.createTrackbar("S", "frame", 255, 255, nothing)cv2.createTrackbar("V", "frame", 255, 255, nothing)​img_hsv = np.zeros((255, 500, 3), np.uint8)​while True:h = cv2.getTrackbarPos("H", "frame")s = cv2.getTrackbarPos("S", "frame")v = cv2.getTrackbarPos("V", "frame")​img_hsv[:] = (h, s, v)​# 图像空间转换(HSV 转 BGR)img_bgr = cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR)​# 数值是 HSV 空间的,但是显示的颜色是 BGR 空间的cv2.imshow("frame", img_bgr)key = cv2.waitKey(1)if key == 27:break​cv2.destroyAllWindows()​

2.一个简单的颜色识别

为什么说是简单的颜色识别呢?因为接下来要实现的程序,是有限制的。在 "S"、"V" 空间不变的条件下,只改变 "H" 空间的数值。因此所能识别的颜色有限,只能识别红、橙、黄、绿、紫这五种颜色。具体实现看代码:

 import cv2​# 1.获取视频源cap = cv2.VideoCapture(0)if cap.open:print("相机打开成功!\n")else:print("未能与相机建立连接...")# 设置相机属性cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)​while True:# BGR 格式_, frame = cap.read()# 2.颜色空间转换(BGR 转 HSV)hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)​# 获取图像的中心位置坐标,颜色识别就是识别的这一点height, width, _ = frame.shapecx = int(width / 2)cy = int(height / 2)​# Pick pixel valuepixel_center = hsv_frame[cy, cx]print(pixel_center)# 获取 H 空间的数值,此颜色识别只考虑 H 空间,S, V 空间同理hue_value = pixel_center[0]​# 3.颜色识别判定,只考虑 H 空间color = "Undefined"if hue_value < 5:color = "RED"elif hue_value < 22:color = "ORANGE"elif hue_value < 33:color = "YELLOW"elif hue_value < 78:color = "GREEN"elif hue_value < 131:color = "BLUE"elif hue_value < 170:color = "VIOLET"else:color = "RED"​# 获取 BGR 空间中图像中心坐标值,用于使显示的文本和中心区域识别的物体同一个颜色pixel_center_bgr = frame[cy, cx]b, g, r = int(pixel_center_bgr[0]), int(pixel_center_bgr[1]), int(pixel_center_bgr[2])# 图像左上角放置识别出来的颜色文本cv2.putText(frame, color, (10, 50), 0, 1.5, (b, g, r), 2)# 识别区域中心画圆cv2.circle(frame, (cx, cy), 5, (25, 25, 25), 3)​cv2.imshow("video frame", frame)key = cv2.waitKey(int(1000 / 30))if key == 27:break​cap.release()cv2.destroyAllWindows()

OPenCV4-颜色识别(一)调色板和简单的颜色识别相关推荐

  1. 人脸识别手机端APK分享 | 极速体验人脸识别功能 创建一个简单的人脸识别手机APP程序

    1.前言 虹软公司提供免费离线人脸识别,对于开发者提供了比较友好.完整的可配置demo.但是如需直接体验功能,还是要花一点时间去完成项目编译.配置等一系列工作,对于初学者.不怎么熟悉整个项目的人来说可 ...

  2. 关于Vuforia扫描识别图片,最简单的设置识别区域

    因为需要做个Vuforia扫描并设置识别区域,查了一些资料发现网上并没太多介绍这块内容. 有看到一个帖子上给了两个解决方案,一个是图片裁剪,但是这个方法太烦了.还有个是遮罩不过因为Vuforia插件中 ...

  3. halcon颜色识别的两种简单方式

    颜色识别的两种简单方式: 1.单通道方式: 原理:通过不同颜色在灰度图中的阈值范围不同来区分颜色(理论上这种方式不推荐,但在一定情况下适用) 材料: halcon代码: dev_close_windo ...

  4. Java简单验证码的识别

    1. 需求 因为项目需要,需要多次登录某网站抓取信息.所以学习了验证码的一些小知识.文章参考http://blog.csdn.net/problc/article/details/5794460的部分 ...

  5. 基于深度学习的车辆信息识别(一):车辆颜色识别

    背景 导师给的一个项目任务,要求对卡口拍摄的车辆监控图片进行自动识别,识别目标包括: 车牌号 车辆颜色 车辆品牌,具体到如奥迪A6之类 驾驶人是否系安全带 是否贴有年检标志 等等-- 相当有挑战性的任 ...

  6. python 简单的颜色序列生成器

    2021/04/21:我火星了???? python Seaborn库 调色板 所以下面的东西都别看了 . . . . . . . . . . 由来 昨天画了这张图,自动分配的颜色比较深,而且总颜色数 ...

  7. 吗咿呀嘿-用js来搞个简单的人脸识别

    缘起 "蚂蚁呀嘿,蚂蚁呀呼,蚂蚁呀哈" 相信最近好多人的朋友圈或者抖音都被类似视频刷过屏! 类似的效果最早是在2020年初,那个时候大家应该还都记得,几乎所有的人都因为疫情原因被迫 ...

  8. 改变,从一个简单的“物体识别”开始

    一.百度AI开放平台 前几天在百度的AI平台上看到了很多好玩的API类,像类似于语音识别.人脸识别.文字识别.自然语言处理等等.这些在当前比较热门的技术都有提供给使用者的API.而且~~~,大部分都是 ...

  9. 按键精灵+大漠插件简单数字验证码识别实践笔记

    因为资源短缺,公司用了一个很老的系统分配资源,每个项目每天都要经历上演一次像抢火车票一样的经历,而往往又空手而归,搞得大家疲惫不堪.而其中的关键在于几个简单的数字验证码的识别,于是在业余时间看了一些验 ...

最新文章

  1. 科大讯飞“AI同传”造假背后的两个关键问题
  2. Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化
  3. python超神之路:Python3 列表list合并的4种方法
  4. 使用C#制作简易的注册表编辑器
  5. C++算法二:冒泡排序
  6. 第四季-专题4-嵌入式文件系统
  7. mac 未能启动java jar_在Mac上运行.jar
  8. pve虚拟化几台服务器,PVE开启嵌套虚拟化
  9. NumPy 数组属性
  10. PowerBuilder方式下图像存储功能的研究
  11. MSF给正常程序添加后门
  12. Hashtable的深拷贝
  13. ImageIO.read(inputStream)读取.webp格式图片报错
  14. Python2.7安装Opencv3
  15. 4G核心网与IMS有什么区别
  16. 如何知道国外流行哪款 App (榜单)
  17. JS逆向 | 某车帝登录参数逆向
  18. PXE+Kickstart 无人值守装机
  19. C语言 | 输入一些字符,直到输入“#”为止
  20. 网优5g前景_5G通信技术的优缺点及前景探讨

热门文章

  1. 2022-06-01 postgres的insert语句执行的关键流程
  2. 【keras】keras教程(参考官方文档)
  3. AD的单端输入和查分输入
  4. JavaScript中的join() 方法
  5. 黑马程序员_Java基础_前期准备02-1
  6. LightGBM算法——广告收益回归预测模型
  7. 小程序开发需要学什么语言呢?看看吧
  8. 自动驾驶仿真:ECU TEST 、VTD、VERISTAND连接配置
  9. https证书怎么申请?
  10. NAT(网络地址转换)