在python中使用opencv将RGB图像转换为HSV及YCrCb图像(附代码)

【时间】2018.11.01

【题目】在python中使用opencv将RGB图像转换为HSV及YCrCb图像(附代码)

目录

概述

一、代码实现

二、运行结果

三、关于HSV及YCrCb的一点补充

3.1HSV颜色空间

3.2 YCRCBA颜色空间


概述

本文主要讲述了如何在python中使用opencv将RGB图像转换为HSV及YCrCb图像,主要使用了cv2库中的cv2.cvtColor()函数,将RGB图像(在opencv中设计BGR图像)转换为HSV图像用到了参数cv2.COLOR_BGR2HSV,而转换为YCrCb图像用到了参数cv2.COLOR_BGR2YCrCb或者cv2.COLOR_BGR2YCR_CB。

 

一、代码实现

功能:此代码用以读取一个文件夹中的所有RGB图片并将它们转换为HSV及YCrCb图像,并分别保存

import cv2

import os

image_path ='F:\\test\\image1\\'

save_path_hsv = 'F:\\test\\image1\\'

save_path_ycrcb = 'F:\\test\\image1\\'



def brg2hsv_ycrcb(image_path,save_path_hsv,save_path_ycrcb):

    filenames = os.listdir(image_path)

    for filename in filenames:

        examname = filename[:-4]

        type = filename.split('.')[-1]

        img = cv2.imread(image_path + '\\'+ filename)

        img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

        img_ycrcb = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)



        save_hsv = save_path_hsv + examname + '_HSV'+'.'+type

        save_ycrcb = save_path_ycrcb + examname + '_YCrCb' + '.' + type

        cv2.imwrite(save_hsv,img_hsv)

        cv2.imwrite(save_ycrcb, img_ycrcb)

if __name__ == '__main__':

  brg2hsv_ycrcb(image_path, save_path_hsv, save_path_ycrcb)

二、运行结果

在python中使用opencv将RGB图像转换为HSV及YCrCb图像(附代码)

 

三、关于HSV及YCrCb的一点补充

3.1HSV颜色空间

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

在python中使用opencv将RGB图像转换为HSV及YCrCb图像(附代码)

3.2 YCRCBA颜色空间

   YCrCb即YUV,主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。