基础要点
这里主要讲了图像色彩空间的处理和色彩空间的基础知识
什么是色彩空间
人们建立了多种的色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间
常见的色彩空间有哪些
常见的色彩空间有:RGB、HSV、HSI、YCrCb、YUV
RGB
HSV
称六角锥体模型,是根据颜色的直观特性创建的一种颜色空间,这个颜色空间是本节课讲解的一个重点。
HSI
是从人的视觉系统出发,用色调( Hue )、色饱和 度( Saturation 或 Chroma )和亮度( Intensity 或 Brightness )来描述颜色。 HSI 颜色空间可以用一个圆 锥空间模型来描述
YCrCb
主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视,这个可以用来检测皮肤和检测人脸
YUV
是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。
应用
标记图像中的特定颜色
一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是网友通过实验计算的模糊范围(准确的范围在网上都没有给出)。
H: 0 — 180
S: 0 — 255
V: 0 — 255
以下是不同颜色的HSV最大最小的范围:
image.png
代码实现
import cv2 as cv
import numpy as np
def access_fixel(img):
'''访问图像的所有元素'''
print(img.shape)
# 获取图像的高度 图像的高度为shape的第一个值(维度)
height = img.shape[0]
# 获取图像的宽度 图像的宽度为shape的第二个值(维度)
weight = img.shape[1]
# 获取图像的通道数量 图像的通道数量为shape的第三个值(维度)
channels = img.shape[2]
for row in range(height):
for col in range(weight):
for c in range(channels):
pv = img[row,col,c]
img[row,col,c]=255-pv
cv.imshow("access_fixel ", img)
img = cv.imread("/Users/reon/Code/Python/OpenCv/durrells.jpg")
cv.namedWindow("input ")
cv.imshow("input ",img)
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow("gray ",gray)
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
cv.imshow("hsv ",hsv)
yuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)
cv.imshow("yuv ",yuv)
luv = cv.cvtColor(img,cv.COLOR_BGR2LUV)
cv.imshow("luv",luv)
# 再hsv的基础上,将图片的黑色部分以白色显示,其他颜色以黑色显示
# h_min_hsv = np.array([0,0,0])
# h_max_hsv = np.array([180,255,46])
# 再hsv的基础上,将图片的红色部分以白色显示,其他颜色以黑色显示
h_min_hsv = np.array([0,43,46])
h_max_hsv = np.array([10,255,255])
# 颜色标注OpenCV 提供了一个方法,inRange()
# 该方法提供三个参数,
# 第一个参数是图像色彩空间即hsv值,
# 第二个参数是hsv的最小查找范围,
# 第三个参数是hsv的最大查找范围。
mask = cv.inRange(hsv,h_min_hsv,h_max_hsv)
cv.imshow("mask ",mask )
cv.waitKey(0)
网友评论