OPenCV4-颜色识别(一)调色板和简单的颜色识别
OPenCV4-颜色识别(一)调色板和简单的颜色识别
使用 OPenCV4 做颜色识别十分简单。本文章使用 python 语言来实现一个调色板和简单的颜色识别。
1.调色板
绘制一个调色板对颜色识别非常有用,当然你也可以使用 PS 等软件自带的调色板,那样会有更好的效果。
调色板的实现原理十分简单,就是通过滑动栏来选择不同的数值,来改变图像画布的颜色。因为在颜色识别中多使用 HSV 颜色空间作为识别阈值判定。所以这个调色板就是通过调节 HSV 空间的 "H"、"S"、"V" 的数值来显示一个 BGR 空间的图像。为什么显示的是 BGR 空间的图像呢?因为一般相机读取的格式都是 BGR 的。所以显示 BGR 空间的图像。总之就是:通过调节 HSV 空间的数值,显示 BGR 空间的图像。代码如下:
import cv2import numpy as npdef 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:breakcv2.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:breakcap.release()cv2.destroyAllWindows()
OPenCV4-颜色识别(一)调色板和简单的颜色识别相关推荐
- 人脸识别手机端APK分享 | 极速体验人脸识别功能 创建一个简单的人脸识别手机APP程序
1.前言 虹软公司提供免费离线人脸识别,对于开发者提供了比较友好.完整的可配置demo.但是如需直接体验功能,还是要花一点时间去完成项目编译.配置等一系列工作,对于初学者.不怎么熟悉整个项目的人来说可 ...
- 关于Vuforia扫描识别图片,最简单的设置识别区域
因为需要做个Vuforia扫描并设置识别区域,查了一些资料发现网上并没太多介绍这块内容. 有看到一个帖子上给了两个解决方案,一个是图片裁剪,但是这个方法太烦了.还有个是遮罩不过因为Vuforia插件中 ...
- halcon颜色识别的两种简单方式
颜色识别的两种简单方式: 1.单通道方式: 原理:通过不同颜色在灰度图中的阈值范围不同来区分颜色(理论上这种方式不推荐,但在一定情况下适用) 材料: halcon代码: dev_close_windo ...
- Java简单验证码的识别
1. 需求 因为项目需要,需要多次登录某网站抓取信息.所以学习了验证码的一些小知识.文章参考http://blog.csdn.net/problc/article/details/5794460的部分 ...
- 基于深度学习的车辆信息识别(一):车辆颜色识别
背景 导师给的一个项目任务,要求对卡口拍摄的车辆监控图片进行自动识别,识别目标包括: 车牌号 车辆颜色 车辆品牌,具体到如奥迪A6之类 驾驶人是否系安全带 是否贴有年检标志 等等-- 相当有挑战性的任 ...
- python 简单的颜色序列生成器
2021/04/21:我火星了???? python Seaborn库 调色板 所以下面的东西都别看了 . . . . . . . . . . 由来 昨天画了这张图,自动分配的颜色比较深,而且总颜色数 ...
- 吗咿呀嘿-用js来搞个简单的人脸识别
缘起 "蚂蚁呀嘿,蚂蚁呀呼,蚂蚁呀哈" 相信最近好多人的朋友圈或者抖音都被类似视频刷过屏! 类似的效果最早是在2020年初,那个时候大家应该还都记得,几乎所有的人都因为疫情原因被迫 ...
- 改变,从一个简单的“物体识别”开始
一.百度AI开放平台 前几天在百度的AI平台上看到了很多好玩的API类,像类似于语音识别.人脸识别.文字识别.自然语言处理等等.这些在当前比较热门的技术都有提供给使用者的API.而且~~~,大部分都是 ...
- 按键精灵+大漠插件简单数字验证码识别实践笔记
因为资源短缺,公司用了一个很老的系统分配资源,每个项目每天都要经历上演一次像抢火车票一样的经历,而往往又空手而归,搞得大家疲惫不堪.而其中的关键在于几个简单的数字验证码的识别,于是在业余时间看了一些验 ...
最新文章
- 科大讯飞“AI同传”造假背后的两个关键问题
- Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化
- python超神之路:Python3 列表list合并的4种方法
- 使用C#制作简易的注册表编辑器
- C++算法二:冒泡排序
- 第四季-专题4-嵌入式文件系统
- mac 未能启动java jar_在Mac上运行.jar
- pve虚拟化几台服务器,PVE开启嵌套虚拟化
- NumPy 数组属性
- PowerBuilder方式下图像存储功能的研究
- MSF给正常程序添加后门
- Hashtable的深拷贝
- ImageIO.read(inputStream)读取.webp格式图片报错
- Python2.7安装Opencv3
- 4G核心网与IMS有什么区别
- 如何知道国外流行哪款 App (榜单)
- JS逆向 | 某车帝登录参数逆向
- PXE+Kickstart 无人值守装机
- C语言 | 输入一些字符,直到输入“#”为止
- 网优5g前景_5G通信技术的优缺点及前景探讨