Opencv色彩空间(GRAY、XYZ、HSV、YCrCb、HLS)展示,以及利用HSV标记指定的颜色
- 本文简单介绍了几个常见的色彩空间转换;
- 因为HSV应用非常广泛,所以单独介绍其强大的功能;
本文用到的两个原始图像,如下图所示:
目录
一、Opencv色彩空间(GRAY、XYZ、HSV、YCrCb、HLS)
(1)GRAY色彩空间
(2)XYZ色彩空间
(3)HSV色彩空间
(4)YCrCb色彩空间
(5)HLS色彩空间
(6)代码实现:
二、利用HSV标记指定的颜色(涉及的三个知识点如下)
(1)通过inRange函数锁定特定
(2)通过基于掩码的按位与显示ROI
(3)显示特定颜色值
(4)综上所述,编写代码如下:
一、Opencv色彩空间(GRAY、XYZ、HSV、YCrCb、HLS)
(1)GRAY色彩空间
GRAY(灰度图像)通常指 8 位灰度图,其具有 256 个灰度级,像素值的范围是[0,255]。
(2)XYZ色彩空间
XYZ 色彩空间是由 CIE(International Commission on Illumination)定义的,是一种更便于计算的色彩空间,它可以与 RGB 色彩空间相互转换。
(3)HSV色彩空间
RGB 是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异,HSV 色彩空间是一种面向视觉感知的颜色模型。HSV 色彩空间从心理学和视觉的角度出发,指出人眼的色彩知觉主要包含三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value), 色调指光的颜色,饱和度是指色彩的深浅程度,亮度指人眼感受到的光的明暗程度。
(4)YCrCb色彩空间
人眼视觉系统(HVS,Human Visual System)对颜色的敏感度要低于对亮度的敏感度。在传统的 RGB 色彩空间内,RGB 三原色具有相同的重要性,但是忽略了亮度信息。
在 YCrCb 色彩空间中,Y 代表光源的亮度,色度信息保存在 Cr 和 Cb 中,其中,Cr 表示 红色分量信息,Cb 表示蓝色分量信息。 亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。在 RGB 光源中,绿色分量的影响最大,蓝色分量的影响最小。
(5)HLS色彩空间
HLS 色彩空间包含的三要素是色调 H(Hue)、光亮度/明度 L(Lightness)、饱和度 S (Saturation)。 与 HSV 色彩空间类似,只是 HLS 色彩空间用“光亮度/明度 L(lightness)”替换了“亮度 (Value)”。
(6)代码实现:
import cv2
import numpy as npsrc = cv2.imread("bulldog.jpg")
src = cv2.resize(src, (int(src.shape[1] / 2), int(src.shape[0] / 2)))GRAY = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
XYZ = cv2.cvtColor(src, cv2.COLOR_BGR2XYZ)
YCrCb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
HSV = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
HLS = cv2.cvtColor(src, cv2.COLOR_BGR2HLS)cv2.imshow("src", src)
cv2.imshow("GRAY", GRAY)
cv2.imshow("XYZ", XYZ)
cv2.imshow("YCrCb", YCrCb)
cv2.imshow("HSV", HSV)
cv2.imshow("HLS", HLS)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、利用HSV标记指定的颜色(涉及的三个知识点如下)
(1)通过inRange函数锁定特定
OpenCV 中通过函数 cv2.inRange()来判断图像内像素点的像素值是否在指定的范围内,其语法格式为:
dst = cv2.inRange( src, lowerb, upperb )
式中:
- dst 表示输出结果,大小和 src 一致。
- src 表示要检查的数组或图像。
- lowerb 表示范围下界。
- upperb 表示范围上界。
返回值 dst 与 src 等大小,其值取决于 src 中对应位置上的值是否处于区间[lowerb,upperb] 内:
- 如果 src 值处于该指定区间内,则 dst 中对应位置上的值为 255。
- 如果 src 值不处于该指定区间内,则 dst 中对应位置上的值为 0。
(2)通过基于掩码的按位与显示ROI
正常显示某个图像内的感兴趣区域(ROI),而将其余区域显示为黑色。其语法格式为:
roi=cv2.bitwise_and(img,img, mask= mask)
通过 mask 设置了两个感兴趣区域(掩模)。后续通过在按位与运算中设置掩模的方式,将原始图像 img 内这两部分的值保留显示,而将其余部分的值置零。
(3)显示特定颜色值
各种颜色值的范围为:
- 蓝色:值分布在[110,100,100]和[130,255,255]之间。
- 绿色:值分布在[50,100,100]和[70,255,255]之间。
- 红色:值分布在[0,100,100]和[10,255,255]之间。
(4)综上所述,编写代码如下:
首先利用函数 cv2.inRange()查找指定颜色区域,
然后利用基于掩码的按位与运算将指定颜色提取出来。
src = cv2.imread("RGB.jpg")
HSV = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)# 确定蓝色、绿色、红色区域
minBlue = np.array([110, 50, 50])
maxBlue = np.array([130, 255, 255])
minGreen = np.array([50, 50, 50])
maxGreen = np.array([70, 255, 255])
minRed = np.array([0, 50, 50])
maxRed = np.array([30, 255, 255])# 通过掩码控制的按位与运算,锁定蓝色、绿色、红色区域
mask = cv2.inRange(HSV, minBlue, maxBlue)
blue = cv2.bitwise_and(src, src, mask=mask)
mask = cv2.inRange(HSV, minGreen, maxGreen)
green = cv2.bitwise_and(src, src, mask=mask)
mask = cv2.inRange(HSV, minRed, maxRed)
red = cv2.bitwise_and(src, src, mask=mask)# 展示各个标记指定的颜色图像
cv2.imshow('blue', blue)
cv2.imshow('green', green)
cv2.imshow('red', red)
cv2.waitKey(0)
cv2.destroyAllWindows()
>>>输出图像,如下图所示:
>>>如有疑问,欢迎评论区一起探讨
Opencv色彩空间(GRAY、XYZ、HSV、YCrCb、HLS)展示,以及利用HSV标记指定的颜色相关推荐
- 树莓派视觉小车 -- 小球追踪(颜色追踪)(OpenCV色彩空间HSV)
目录 效果展示 基础理论(HSV) 为什么用HSV空间而不是RGB空间? HSV 1.Hue(色相) 2.Value(明度) 3.Saturation(饱和度) 一.初始化 滑动条初始化 1.创建回调 ...
- CV — 色彩空间:RGB、HSV、HLS
文章目录 CV - 色彩空间:RGB.HSV.HLS 一. RGB (一) RGB 颜色系统 二.HSV (一) HSV颜色模型 (二) 代码案例 1. HSV 值进行目标物体的提取 2. 使用 HS ...
- OpenCV实战(7)——OpenCV色彩空间转换
OpenCV实战(7)--OpenCV色彩空间转换 0. 前言 1. RGB 色彩空间 2. 色彩空间转换 2.1 CIE L*a*b* 色彩空间 2.2 其它色彩空间 3. 用色调.饱和度和亮度表示 ...
- opencv色彩空间类型转换(python)
色彩空间类型转换 色彩空间类型转换 色彩空间基础 GRAY色彩空间 XYZ色彩空间 YCrCb色彩空间 HSV色彩空间 HLS色彩空间 CIEL*a*b*色彩空间 CIEL*u*v*色彩空间 Baye ...
- python怎么编写视觉识别_Python视觉识别--OpenCV色彩空间\图像运算\ROI(四)
(七) 色彩空间 什么是色彩空间,人们建立了多种色彩模型,以一维.二维.三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间 色彩空间有很多,但是常用的色彩空间一共5种:RGB ...
- 05 OpenCV色彩空间处理
色彩空间(Color Space)是一种用于描述颜色的数学模型,它将颜色表示为多维向量或坐标,通常由三个或四个独立的分量来表示.不同的色彩空间在颜色的表示方式.可表达颜色的范围.计算速度和应用场景等方 ...
- OpenCV 色彩空间的改变
OpenCV中有150多种颜色空间转换方法.最广泛使用的转换方法有两种,BGR与Gray之间的转换和BGR与HSV之间的转换. cv.cvtColor(input_image, flag) input ...
- openCV色彩空间转换
RGB 人眼的色彩空间 BGR opencv默认使用的色彩空间 他们的最大差别是R,B排列顺序不一样,若是把RGB直接放入opencv系统中会造成颜色有差异. 给opencv的数据是要BGR的,电脑内 ...
- hsv空间阈值检测matlab,基于HSV色彩空间变换的阴影检测算法——MATLAB实现
图像在不同的色彩空间可以表现出不同的光谱特性,从而适用于不同的应用场合.在 HSV 色彩空间中,阴影在色度和饱和度通道中都与非阴影区域有明显的区别.根据阴影的这种特性,利用连续两次的 HSV 彩色空间 ...
最新文章
- 微生物领域非顶级期刊概述
- hbase 修改表名_HBase学习——2.HBase原理
- 「MICCAI 2016」Reading Note
- AIoT成功的关键要素
- 一文带你认识keepalived,再带你通关LVS+Keepalived!
- 发动机压缩比怎么计算公式_怎么判断发动机有积碳,发动机积碳多的症状有哪些...
- Cortex-M0(5)---Cortex-M0【中断向量表】【中断控制和系统控制
- 机器学习基于语义特征的情感分析
- android自动化必备之界面元素
- mysql insert on update_我可以始终使用INSERT…ON DUPLICATE UPDATE进行简单的更新/插入吗?...
- 阿里图标库——批量下载图标
- 成功在中东和北非地区发布应用或游戏的 7 个技巧
- NXP智能车竞赛笔记(室外电磁组)
- php 模拟登陆微信,PHP微信模拟登陆并给用户发送消息的方法
- java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml
- buuctf web warmup详细题解
- 华为2022硬件逻辑笔试题
- UTF8 To GBK 转换程序
- 日期格式之间的互相转换
- 微信登陆的LOL只有一个服务器,LOL:新功能!部分大区开放了微信登录功能,网友:有啥用?...