日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

几种颜色空间(RGB,YUV,YIQ,HSI)的基本概念及转换

發布時間:2023/12/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几种颜色空间(RGB,YUV,YIQ,HSI)的基本概念及转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,我們先來了解下有關顏色的基本概念

一、色彩的基本概念

1、彩色的三要素
亮度:即人眼對光的明亮程度的感受。
色調:人眼能看到的顏色種類,與光的波長有關
飽和度:顏色深淺程度。與各種顏色混入白光的比例有關。
以上 色調 + 飽和度 = 色度

2、三基色原理
三基色可以通過適當比例的混合組成自然界中任何一種顏色

由于人眼對于紅綠藍三種色光最為敏感,并且由這三種顏色能組成的顏色范圍最廣,故一般選用RGB作為三基色

但是,三基色并不是唯一的,只要滿足任何一種顏色都不能由其他兩種顏色合成即可組成三基色。例如,我們還可以用黃色,品紅,青色組成三基色。

3、亮度的組成

4、常用的四種顏色空間

  • A、RGB顏色空間
    RGB彩色空間利用相加混合法將三個彩色分量按照不同的比例疊加,最終就可以在屏幕中顯現出各種顏色。
    任意的彩色光F都有一個配色的公式:F = r[R]+g[G]+b[B]
    式中r,g,b為系數,r+g+b=1。故,知其二便可唯一確定色調。

  • B、YUV顏色空間
    研究表面,人眼對于亮度的敏感度遠大于對于顏色細節的敏感度,因此,才彩色電視機系統中不采用RGB顏色空間,一般為以下的空間:

采用YUV顏色空間的好處有:

a、解決了彩色電視機和黑白電視機的兼容問題(因為黑白電視機只需要提取信號中的Y信號即可顯示出來)

b、可以節省傳輸帶寬
一般情況下,數字化后的
Y:U:V = 8:4:4或者Y:U:V = 8:2:2,即亮度信號Y需要8比特表示,UV需要4個或者2個比特表示,我們知道,RGB顏色空間下,需要24比特來表示一個顏色,而利用YUV則僅需要16比特或者12比特,達到壓縮的目的。

在PAL制下,白光亮度Y和紅綠藍三色光的關系可以用以下公式表示:
Y = 0.222R + 0.707G + 0.071B
在NTSC制下,Y=0.299R+0.587G+0.114B

色差U,即藍基色分量與亮度的差值信號,可以用以下公式表示:
U = k1(B - Y)
色差V,即紅基色分量與亮度的差值信號,可以用以下公式表示:
V = k2(R - Y)
通常,k1 = 0.493,k2 = 0.877

YUV顏色空間與RGB顏色空間的轉換

  • C、YIQ顏色空間

如上圖所示,YIQ顏色空間被NTSC制的彩色電視機使用。
其中Y還是亮度信號,用👇公式表示:
Y = 0.299R + 0.587G + 0.114B

I代表人眼敏感的色彩色差信號,用👇公式表示:
I = 0.596R - 0.275G - 0.321B’

Q代表人眼不敏感的色差信號,用👇公式表示:
Q = 0.212R - 0.523G + 0.311B

  • D、HSI顏色空間(HSI)
    色調H,飽和度為S,光強為V

    上圖為博客:https://www.cnblogs.com/faith0217/articles/4264652.html
    中的內容

二、編程實現提取圖像中一點的RGB顏色值,并實現RGB轉換為YUV,YIQ,HIS。

以下程序利用python實現

import math import numpy as np from PIL import Imageimgpath = 'C:/Users/11037/Desktop/7.jpg' #圖片路徑m_yuv = np.mat([[0.299,0.587,0.114],[-0.299,-0.587,0.886],[0.701,-0.587,-0.114]]) m_yiq = np.mat([[0.299,0.587,0.114],[0.596,-0.274,-0.322],[0.211,-0.524,0.312]])def rgb2yuv(need_rgb):ans = list([int(i) for i in m_yuv*need_rgb])return ansdef yuv2rgb(need_yuv):m = m_yuv.Ians = list([int(i) for i in m*need_yuv])return ansdef rgb2yiq(need_rgb):ans = list([int(i) for i in m_yiq*need_rgb])return ansdef yiq2rgb(need_yiq):m = m_yiq.Ians = list([int(i) for i in m*need_yiq])return ans''' def rgb2hsi(need_rgb:np.mat): rgb = list(need_rgb)r,g,b = int(rgb[0]),int(rgb[1]),int(rgb[2])theta = math.acos((((r-g)+(r-b))/2)/math.sqrt((r-g)**2+(r-b)*(g-b)))print('theta',theta)if b<=g:h = thetaelse:h = 360-thetas = 1-3*min(r,g,b)/(r+g+b)i = (r+g+b)/3return (h,s,i) '''img = Image.open(imgpath) img = np.array(img) print(img.shape) x = int(input('請輸入x:')) y = int(input('請輸入y:'))testrgb = np.mat(img[x,y]).T rgb2 = rgb2yuv(testrgb) print('需要轉換的rgb為:\n',testrgb) print('rgb轉yuv:',rgb2) print('yuv轉rgb:',yuv2rgb(np.mat(rgb2).T))

三、利用OpenCV轉換RGB為HSV,YUV

1、代碼

import math import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgpath = '' #圖片路徑img = cv.imread(imgpath)imggray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) imghsv = cv.cvtColor(img,cv.COLOR_BGR2HSV) imgyuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)plt.subplot(221),plt.imshow(img),plt.title('img') plt.subplot(222),plt.imshow(imggray),plt.title('imggray') plt.subplot(223),plt.imshow(imghsv),plt.title('imghsv') plt.subplot(224),plt.imshow(imgyuv),plt.title('imgyuv')plt.show()

效果:


若發現錯誤請給予指出,謝謝~

總結

以上是生活随笔為你收集整理的几种颜色空间(RGB,YUV,YIQ,HSI)的基本概念及转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。