当前位置: 首页 > news >正文

【Opencv实战】颜色测试:你是色盲/色弱吗?从零带你了解色彩与原理,简单的颜色识别小程序,感动.jpg(全是干货)

导语

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 |已有文章汇总 | 持续更新,直接看这篇就够了

(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~)

 

相关文章:

  • windows服务开发
  • leetcode-每日一题-二进制表示中质数个计算置位(简单,popcount算法)
  • 利用styleSheet,避免js手动频繁修改样式
  • 火爆的超级人工智能ChatGPT,唯独鄙视中国人
  • [附源码]Python计算机毕业设计Django医院挂号住院管理系统
  • 前端工程师常考手写面试题指南
  • 易基因|m6A去甲基化酶ALKBH5通过降低PHF20 mRNA甲基化抑制结直肠癌进展 | 肿瘤研究
  • Git 在gitconfig 中的多用户配置
  • 数据结构的起航,用C语言实现一个简约却不简单的顺序表!(零基础也能看懂)
  • 职场经验:为什么要学习自动化测试?过来人告诉你答案
  • 2022系统分析师论文真题
  • C++ Reference: Standard C++ Library reference: Containers: deque: deque
  • RabbitMQ——RabbitMQ的六种工作模式详解
  • 测试工程师面试题
  • HashMap部分源码解析
  • Expedita dolor commodi laborum quos.Distinctio aliquam voluptatum sit.
  • 使用openssl工具生成CSR文件
  • Java 反射总结
  • Kafka(四)- Kafka 生产者
  • Electron结合Vue使用说明
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉