在OpenCV + Python中使用色彩空间进行图像分割
什么是色彩空间/h5>
在最常见的颜色空间RGB(红色绿色蓝色)中,颜色以红色,绿色和蓝色分量表示。用更专业的术语来说,RGB将颜色描述为三个组成部分的元组。每个分量可以取0到255之间的值,其中元组(0, 0, 0)代表黑色,(255, 255, 255)代表白色。
RGB被认为是三原色“加法”颜色空间,可以想象颜色是由大量红色,蓝色和绿色的光照射到黑色背景上产生的。
颜色 | RGB值 |
---|---|
红色 | 255,0,0 |
橙色 | 255,128,0 |
粉色 | 25,153,255 |
RGB是五个主要色彩空间模型之一,每个模型都有许多分支。颜色空间太多,因为不同的颜色空间可用于不同的目的。
在印刷领域,CMYK很有用,因为它描述了从白色背景产生颜色所需的颜色组合。RGB中的0元组是黑色,而CMYK中的0元组是白色。我们的打印机包含青色,品红色,黄色和黑色的墨水罐。
HSV和HSL是色相,饱和度和亮度/亮度的描述,对识别图像的对比度特别有用。这些色彩空间常用于软件的选色工具和 页设计中。
实际上,颜色是一种连续现象,意味着存在无限数量的颜色。但是,色彩空间通过离散结构(固定数量的整数整数值)表示颜色,这是可以接受的,因为人眼和感知也受到限制。颜色空间完全能够代表我们能够区分的所有颜色。
OpenCV中的色彩空间和读取图像
导入OpenCV之后,您可以查看OpenCV提供的所有色彩空间转换,并将它们全部保存到变量中:
您将需要matplotlib.pyplot查看图像,并需要NumPy进行一些图像处理。如果您还没有Matplotlib或NumPy的安装,您将需要pip3 install matplotlib和pip3 install numpy进行安装:
结果:
结果:
利用同样的方法选出白色的阈值
利用彩色图像进行图像分割
一旦获得合适的色彩范围,您就可以cv2.inRange()尝试设定Nemo阈值。inRange()接受三个参数:图像,较低范围和较高范围。它返回ndarray图像大小的二进制mask(1和0),其中的值1表示范围内的值,0值表示范围外的值。
import cv2import matplotlib.pyplot as pltimport numpy as npimg = cv2.imread('nemo.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)hsv_img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)light_orange = (1,190,200)dark_orange = (18,255,255)light_white = (0,0,200)dark_white = (145,60,255)ora
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!