导语
Hello,大家好呀!我是木木子吖~
一个集美貌幽默风趣善良可爱并努力码代码的程序媛一枚。
听说关注我的人会一夜暴富发大财哦~
(哇哇哇 这真的爱😍😍)
所有文章完整的素材+源码都在👇👇
粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。
为什么用手机自拍时,它能识别出你的脸,还能估算你的年龄?智能机器人又是怎么“看”到的
人?当当当,给大家介绍一下opencv模块。
表面看起来不起眼的东西,其实背后有可能很神奇……能实现多种功能是现在计算机编程人员最
喜欢最需要的库之一。
今天我们就来介绍一下神奇方法之我们将用python的OpenCV模块实现简答的颜色识别💥
(一个小案例文章太短了,就索性两个小案例一起来讲解啦)
正文
第一个小案例💨💨💨
一、OpenCV中的基本颜色检测
1)思路讲解
我们用颜色空间或颜色模型来表示计算机上的颜色,该模型基本上将颜色范围描述为数字元
组。除了讨论每种颜色之外,我们还将讨论我们使用的最常见的颜色空间。即RGB(红色,绿
色,蓝色)和HSV(色调,饱和度,值)。
RGB基本上将颜色描述为三个组成部分的元组。每个分量可以取0到255之间的值,其中元组
(0,0,0)表示黑色,而(255,255,255)表示白色。例如,如果要在屏幕上显示纯蓝色
像素,则R值将为0,G值将为0,B值将为255。
下面是一些RGB颜色的例子:
2)主程序
import cv2import numpy as np
img = cv2.imread('www.linuxmi.com.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#Red color rangle 169, 100, 100 , 189, 255, 255
lower_range = np.array([110,50,50])
upper_range = np.array([255,255,0])
mask = cv2.inRange(hsv, lower_range, upper_range)
cv2.imshow('www.linuxmi.ccom - image', img)
cv2.imshow('www.linuxmi.ccom - mask', mask)
cv2.waitKey(0)cv2.destroyAllWindows()
3)原图展示
首先,你需要在你的工作目录中有一个图像,我正在使用这个图像,你可以从下面得到这个图
像。
首先我们需要加载图像,然后我们将图像转换为HSV颜色。
img = cv2.imread('www.linuxmi.com.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
之后,您需要确定颜色的上限和下限,可以为此建议使用imutils。在上图中,我们将检测三种蓝色。lower_range = np.array([110,50,50])
upper_range = np.array([255,255,0])
之后,我们需要创建图像的蒙版。
mask = cv2.inRange(hsv, lower_range, upper_range)
最后我们需要展示图像和蒙版。
cv2.imshow('www.linuxmi.ccom - image', img)
cv2.imshow('www.linuxmi.ccom - mask', mask)
4)效果展示
第二个小案例💨💨💨(升级版)
参考:RGB-颜色模型
参考:HSV色彩模型
一、 BGR 和 HSV 颜色模型
1)BRG Model
RGB是红色、绿色和蓝色的缩写。这个系统中的颜色是通过添加不同强度的红、绿、蓝光产生
的。这种原理被称为加色混合,例如用于LCD显示器,如所示图1。每个像素由红色、绿色和蓝
色子像素组成。
RGB颜色模型可以理解为三维笛卡尔坐标系中的立方体,红色、绿色和蓝色通道各有一个轴
[BB09b,第186页]。因此,颜色可以定义为矢量(r,g,b)T(r,g,b)T,在哪里rr, gg,以及bb是每
个通道的颜色强度。为了区分RGB和其他颜色模型,我们定义了元组(r,g,b)RGB:=
(r,g,b)T(r,g,b)RGB:=(r,g,b)T. 图2显示RGB立方体,每个通道的值在[0,1][0,1]间隔。然而,在计
算机图形学中,介于0和255之间的整数值——在十六进制系统中介于0和FF之间——也是一种
流行的选择。例如,RGB颜色可以用CSS [Çe11]和OpenGL中的任何一种符号来指定。
此类模型的缺点显而易见,就是很难去表达一种颜色。比如你修改了如下BGR中的B值,间接
地, G和R通道的颜色也会被改变掉。
2)HSV Model
H表示Hue颜色;S表示Saturation饱和度;V表示Value明度。
简单理解就是H指定一种颜色,从0到360;S是白光所占程度,从0到1, 0表示饱和度最高,就
是白光最多;V表示明度,从0到1, 0表示最暗
二、环境安装
小编使用的环境:Python3、Pycharm社区版、opencv模块,部分自带的就不一一 展示啦。
模块安装:pip install -i https://pypi.douban.com/simple/+模块名
三、使用摄像头,利用HSV实现颜色识别
1)思路
读取摄像头视频流,取窗口中间一点,将其像素值(BGR)转换为HSV,然后根据Hue来简单判断
颜色。然后显示到窗口上。
2)主程序
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,1080) #set window's width and height
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,780)
while True:
_, frame = cap.read()
hsv_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
height,width,_ = hsv_frame.shape
wx = int(width/2) # center
wy = int(height/2)
center_color = hsv_frame[wy,wx] #中心点HSV像素值
hue_value = center_color[0] #取Hue
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 < 167:
color = 'VIOLET'
else:
color ='RED'
bgr_color = frame[wy,wx]
b,g,r = int(bgr_color[0]),int(bgr_color[1]),int(bgr_color[2])
cv2.circle(frame,(wx,wy),5,(0,255,0),3) # center (x,y)
cv2.putText(frame,color,(10,50),0,1,(b,g,r),2)
cv2.imshow('frme',frame)
key = cv2.waitKey(1)
if key ==27:
break
cap.release()
cv2.destroyAllWindows()
三、效果展示
1)green绿色
2)red红色
3)orange橙色
总结
好啦!今天的文章就到这里正式结束了哈——两个小案例简单的识别颜色就完成啦!
有需要的小伙伴儿记得学习学习哈,学习从不止步~
下面在这里做一个汇总,帮助你更有效率的找到之前写的文章,各种类型的哈🎉
🎯完整的免费源码领取处:找我吖!文末公众hao可自行领取,滴滴我也可!
🔨推荐往期文章——
项目1.1 动漫化人物
【突破次元壁】谁说二次元离我们遥远?Python特效火遍全网,关键技术原来是它。
项目1.6 年龄检测器
为什么每个女生都比较避讳别人问年龄问题?于是我偷偷写了一款年龄检测器,公司同事的年龄都被我知道了~
项目3.3 图片处理加/去水印
【一篇解决】Python图片处理: 去水印/加水印—这几个方法你一定要学会,太神奇了~(建议保留)
项目3.4 Opencv水果识别小程序
【Opencv实战】识别水果的软件叫什么?一款超好用的识别软件分享,一秒鉴定(真是活~久~见~啊)
项目3.1 抠图神器
【爆赞】这款Python小程序自动抠图只需5秒,秒杀PS手动抠图?
🎄文章汇总——
汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~)
文章来源:https://www.toymoban.com/news/detail-493789.html
文章来源地址https://www.toymoban.com/news/detail-493789.html
到了这里,关于【Opencv实战】颜色测试:你是色盲/色弱吗?从零带你了解色彩与原理,简单的颜色识别小程序,感动.jpg(全是干货)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!