首页 > 其他分享 >机器视觉学习(六)—— 图像的颜色识别

机器视觉学习(六)—— 图像的颜色识别

时间:2024-03-21 17:31:46浏览次数:17  
标签:颜色 image cv2 RGB 图像 np 视觉 识别

目录

一、色彩空间

1.1 RGB色彩空间

1.2 HSV色彩空间

1.3 灰度

1.4 CMYK色彩空间

1.5 Lab色彩空间

二、色彩空间转换

三、识别颜色

3.1 识别一种特定的颜色

3.2 识别多种颜色


一、色彩空间

计算机视觉中常用的色彩空间有RGB色彩空间、HSV色彩空间、CMYK色彩空间、Lab色彩空间等。

1.1 RGB色彩空间

RGB色彩空间是一种常用的计算机视觉颜色表示方法,它使用红(R),绿(G),蓝(B)三个颜色通道来表示所有可见光的颜色。每个通道的取值范围是0到255,代表了相应颜色的强度。通过组合不同强度的三个通道,可以表示出各种各样的颜色。

在RGB色彩空间中,每个像素的颜色可以表示为一个三维向量 (R, G, B),其中R、G、B分别代表红、绿、蓝的强度。通过调整这三个通道的强度,可以产生大量的颜色。

1.2 HSV色彩空间

HSV色彩空间是一种常用于计算机视觉领域的色彩表示方式。HSV代表色相(Hue)、饱和度(Saturation)和明度(Value)。

色相(Hue)表示颜色的种类或者类型。如红色、绿色、蓝色等。色相的取值范围是0到360度,对应了色环上不同的位置。

饱和度(Saturation)表示颜色的纯度或者鲜艳程度。饱和度的取值范围是0到1,0表示灰度(无色彩),1表示最高饱和度(最鲜艳的颜色)。

明度(Value)表示颜色的明亮程度。明度的取值范围也是0到1,0表示最暗的颜色,1表示最亮的颜色。

计算机视觉中常用HSV色彩空间来对图像进行颜色识别、色彩分割等任务。由于HSV色彩空间能够更好地模拟人类感知颜色的方式,因此在一些特定的应用场景中使用HSV色彩空间能够获得更好的效果。

1.3 灰度

灰度空间是指图像的亮度分量,即图像中每个像素的亮度值。灰度空间用于表示图像的黑白信息,常用的灰度空间有灰度图像和灰度直方图。

灰度图像是指每个像素的颜色只有灰度值,没有颜色信息。在计算机中,灰度图像通常使用8位表示,灰度值的范围为0-255,其中0表示黑色,255表示白色。

1.4 CMYK色彩空间

CMYK色彩空间是一种用于打印颜色的色彩空间,由青色(Cyan)、洋红色(Magenta)、黄色(Yellow)和黑色(Key)四个颜色通道组成。每个颜色通道的取值范围是0到100,表示颜色的浓度。

1.5 Lab色彩空间

Lab色彩空间是一种基于人眼感知的色彩空间,由亮度(L)、红绿色度(a)、黄蓝色度(b)三个参数组成。亮度取值范围是0到100,红绿色度和黄蓝色度取值范围是-128到127。Lab色彩空间可以很好地描述人眼对颜色的感知。

二、色彩空间转换

下面我直接代码显示:(有注释)

import cv2
import numpy as np

# 将RGB图像转换为灰度图像
def rgb2gray(image):
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    return gray_image

# 将RGB图像转换为HSV图像
def rgb2hsv(image):
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    return hsv_image

# 将RGB图像转换为LAB图像
def rgb2lab(image):
    lab_image = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
    return lab_image

# 将RGB图像转换为YCrCb图像
def rgb2ycrcb(image):
    ycrcb_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
    return ycrcb_image

# 将RGB图像转换为L*a*b*图像
def rgb2labstar(image):
    labstar_image = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
    return labstar_image

# 加载RGB图像
image = cv2.imread('image.jpg')       //注意换成自己的路径

# 将RGB图像转换为灰度图像
gray_image = rgb2gray(image)

# 将RGB图像转换为HSV图像
hsv_image = rgb2hsv(image)

# 将RGB图像转换为LAB图像
lab_image = rgb2lab(image)

# 将RGB图像转换为YCrCb图像
ycrcb_image = rgb2ycrcb(image)

# 将RGB图像转换为L*a*b*图像
labstar_image = rgb2labstar(image)

# 显示转换后的图像
cv2.imshow('RGB Image', image)
cv2.imshow('Gray Image', gray_image)
cv2.imshow('HSV Image', hsv_image)
cv2.imshow('LAB Image', lab_image)
cv2.imshow('YCrCb Image', ycrcb_image)
cv2.imshow('L*a*b* Image', labstar_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

三、识别颜色

3.1 识别一种特定的颜色

首先,我们可以通过颜色画板来查看对应颜色的BGR值。

知识拓展:

"""
    滑条控制BGR
"""


"""
创建窗口:           cv2.namedWindow("windowname")
创建滑条:           cv2.createTrackbar("teackbarname","windowname",min,max,onchange)
获取滑条数据:       cv2.getTrackbarPos("teackbarname","windowname")

        windowname:             窗口名
        trackbarname:           滑条名
        min:                    滑条最小值
        max:                    滑条最大值
        onchange:               每次滑块更改调用的函数

初始化图像:
    np.zeros((length, width, number), np.uint8)
        默认初始化后的类型为 float64,后面虽然将其赋值为整数,但其存储类型还是浮点数,因其类型不对从而导致图像不能正常显示

        length:                     图像的长度
        width:                      图像的宽度
        number:                     颜色通道数
        np.uint8:                   使插值算法的结果显示正常

    np.zeros(shape, dtype = float, order="C")
        shape:                      创建的新数组的形状 (维度)
        dtype:                      创建新数组的数据类型    (默认 float64)
        order:                      可选参数    (C: 代表与C语言类似,行优先;     F: 代表列优先)
        返回值:                      给定维度的全零数组

"""

创建滑条控制颜色画板:

import cv2 as cv
import numpy as np

img = np.zeros((480,480,3),np.uint8)               # 初始化一个 480*480的图像
def nothing():                                     # 创建一个函数
    pass

cv.namedWindow("BGR")                             # 创建窗口
cv.createTrackbar("R","BGR",0,255,nothing)        # 创建滑条
cv.createTrackbar("G","BGR",0,255,nothing)
cv.createTrackbar("B","BGR",0,255,nothing)

while(1):
    r = cv.getTrackbarPos("R","BGR")               # 获取滑条数据
    g = cv.getTrackbarPos("G","BGR")
    b = cv.getTrackbarPos("B","BGR")
    print(r,g,b)

    img[:] = [b,g,r]
    cv.imshow("BGR",img)
    cv.waitKey(1)

运行结果:

由图可知:     R:39                G:212                B:231

要使用OpenCV识别特定的RGB颜色,完整的示例代码如下:

import cv2
import numpy as np

# 定义要识别的颜色范围
lower_red = np.array([35, 212, 230])
upper_red = np.array([45, 212, 232])

# 读取图像
img = cv2.imread("D:\Open_CV\OpenCV_demo\Pictures\lanse.png")

# 图像缩放 (长,宽)
image = cv2.resize(img,(320,320),interpolation=cv2.INTER_AREA)      # 图像缩放 (长,宽)


# 将图像从BGR转换为RGB颜色空间
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# 创建掩膜
mask = cv2.inRange(image_rgb, lower_red, upper_red)

# 显示结果
result = cv2.bitwise_and(image_rgb, image_rgb, mask=mask)

# 将图像从RGB转换为BGR颜色空间
result = cv2.cvtColor(result, cv2.COLOR_RGB2BGR)

cv2.imshow("Result", result)
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

3.2 识别多种颜色

跟上述中识别一种颜色的方法一样,只不过需要加上被识别的颜色范围,多创建几个掩膜和显示窗口。

例如:

  • 定义要识别的颜色范围:
# 定义要识别的颜色范围
red_lower = np.array([0, 0, 100], np.uint8)
red_upper = np.array([20, 255, 255], np.uint8)

blue_lower = np.array([100, 100, 100], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)
 
  • 根据定义的颜色范围,创建掩膜,将图像中的颜色区域标记为白色,其余区域标记为黑色:
red_mask = cv2.inRange(hsv_image, red_lower, red_upper)
blue_mask = cv2.inRange(hsv_image, blue_lower, blue_upper)
 
  • 在原始图像上使用掩膜,只保留颜色区域:
red_result = cv2.bitwise_and(image, image, mask=red_mask)
blue_result = cv2.bitwise_and(image, image, mask=blue_mask)
 
  • 显示结果:
cv2.imshow('Red Result', red_result)
cv2.imshow('Blue Result', blue_result)
cv2.waitKey(0)
 

标签:颜色,image,cv2,RGB,图像,np,视觉,识别
From: https://blog.csdn.net/qq_74375828/article/details/136887650

相关文章

  • 课程设计——基于matlab语言的PCA人脸识别系统的设计与实现,采用GUI界面进行效果演示
    本论文源码是基于Matlab实现的PCA算法来进行人脸图片的识别与比对,通过GUI界面进行效果展示,适合基于matlab、人脸识别等人工智能领域的课程设计和毕设,整个算法结构简单、易于理解,如需完整源码,可以联系博主获取。一、引言人脸识别技术作为计算机视觉领域的一个重要分支,因其......
  • 文献学习-21-DaFoEs:混合数据集以推广微创机器人手术中的视觉状态深度学习力估计
    DaFoEs:MixingDatasetsTowardstheGeneralizationofVision-StateDeep-LearningForceEstimationinMinimallyInvasiveRoboticSurgeryAuthors: MikelDeIturrateReyzabal,GraduateStudentMember,IEEE,MingcongChen,WeiHuang,SebastienOurselin,and......
  • 使用tencentcloud-sdk-php库通用印刷体识别GeneralBasicOCR文字识别PHP代码完整版
    使用tencentcloud-sdk-php进行通用印刷体识别(GeneralBasicOCR),您需要先确保已经按照上述步骤安装了该SDK,并在腾讯云控制台上获取了您的SecretId和SecretKey。代码开始:<?phprequire'vendor/autoload.php';//根据您的项目结构引入autoload文件useTencentCloud\Comm......
  • AI新工具(20240321) 又一个开源的Sora实现;高质量动漫风格图像的文本到图像模型;字节跳
    ✨1:Mora利用多智能体合作生成视频任务的多智能体框架Mora是一种多智能体框架,专为通用视频生成任务设计。它通过多个视觉智能体的协作,实现了在多种视频生成任务中的高质量输出,旨在复制并扩展OpenAISora的能力。以下是通俗语言总结的Mora功能以及可能的使用情景......
  • 身份证ocr,python身份证识别ocr接口代码,实名认证接口
    基于文字识别技术产物的身份证识别接口现已成熟,通过手机、电脑或者摄像头终端设备拍照或者上传身份证图片即可实现身份证照片上文字的识别,从而提取到身份证信息。翔云除了提供身份证识别接口外,还完善了实名认证接口方案,搭配翔云身份证实名认证接口可谓是效率翻倍。身份证......
  • 【视觉语言大模型+LLaVA1.0】大语言模型视觉助手(视觉指令调优)GPT4-Vision丐版
    官方资源汇总:项目主页||https://huggingface.co/liuhaotian23.04.LLaVA1.论文:LargeLanguageandVisionAssistant(VisualInstructionTuning)23.10LLaVA-1.5论文:ImprovedBaselineswithVisualInstructionTuning23.11LLaVA-Plus项目:LLaVA-Plus:LargeLang......
  • 【大语言视觉助手+LLaVA1.5】23.10.LLaVA-1.5改善后视觉语言大模型: Improved Baselin
    LLaVa家族官方资源汇总:项目主页||https://huggingface.co/liuhaotian23.04.LLaVA1.0论文:LargeLanguageandVisionAssistant(VisualInstructionTuning)23.06LLaVA-Med(医学图片视觉助手):TrainingaLargeLanguage-and-VisionAssistantforBiomedicineinOne......
  • 超分辨率(3)--基于RCAN网络实现图像超分辨率重建
    目录一.项目介绍二.项目流程详解2.1.数据处理模块2.2.损失函数设置 2.3.网络模型构建三.测试网络一.项目介绍RCAN:ResidualChannelAttentionNetwork(残差通道注意网络)卷积神经网络(CNN)的深度对于图像超分辨率(SR)是极其关键的因素。然而,我们观察到,更深层次的图......
  • 图像修改
    图像修改器是一组有用的单词,可指导AI创建特定风格的图像。例如,通过包含lineart在输入提示中,它将引导人工智能制作看起来像是用墨水笔绘制的图像。单击特定修改器将其添加到您的图像中。再次单击选定的修改器可将其从图像中删除。修饰符按类别进行组织,因此请探索可用的不同样......
  • 数字图像处理学习笔记(一)
    数字图像处理学习笔记(一)digital_image_process说明内容列表(已完成)第一章绪论第二章基本原理Matlab支持图片格式图像操作数据类图像类型数据类与图像数据类型间的转换数组索引例2.5标准数组运算符代码优化单元数组与结构体digital_image_process数字图像处理学习......