Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換
一、色彩空間的轉(zhuǎn)換
代碼如下:
#色彩空間轉(zhuǎn)換 import cv2 as cv def color_space_demo(img): gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB轉(zhuǎn)換為GRAY 這里的GRAY是單通道的 cv.imshow("gray", gray) hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB轉(zhuǎn)換為HSV cv.imshow("hsv", hsv) yuv = cv.cvtColor(img, cv.COLOR_RGB2YUV) #RGB轉(zhuǎn)換為YUV cv.imshow("yuv",yuv) Ycrcb = cv.cvtColor(img, cv.COLOR_RGB2YCrCb) #RGB轉(zhuǎn)換為YCrCb cv.imshow("Ycrcb", Ycrcb) src = cv.imread('D:\imageload\example.png') cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE) cv.imshow('first_image', src) color_space_demo(src) cv.waitKey(0) cv.destroyAllWindows()
運(yùn)行結(jié)果:
1.RGB就是指Red,Green和Blue,一副圖像由這三個(gè)channel(通道)構(gòu)成
2.Gray就是只有灰度值一個(gè)channel。
3.HSV即Hue(色調(diào)),Saturation(飽和度)和Value(亮度)三個(gè)channel
切記(純屬個(gè)人理解):
1.百度百科說,將原來的RGB(R,G,B)中的R,G,B統(tǒng)一按照一種轉(zhuǎn)換關(guān)系用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰度圖。
2.opencv里,COLOR_RGB2GRAY是將三通道RGB對(duì)象轉(zhuǎn)換為單通道的灰度對(duì)象。
3.將單通道灰度對(duì)象轉(zhuǎn)換為 RGB 時(shí),生成的RGB對(duì)象的每個(gè)通道的值是灰度對(duì)象的灰度值。
RGB是為了讓機(jī)器更好的顯示圖像,對(duì)于人類來說并不直觀,HSV更為貼近我們的認(rèn)知,所以通常我們?cè)卺槍?duì)某種顏色做提取時(shí)會(huì)轉(zhuǎn)換到HSV顏色空間里面來處理.
補(bǔ)注:
1.HSV如下圖:
2.opencv里HSV色彩空間范圍為: H:0-180 S: 0-255 V: 0-255
3.常見的色彩空間有RGB、HSV、HIS、YCrCb、YUV,其中最常用的是RGB、HSV、YUV,其中YUV就是YCrCb(詳見百度百科)。其中YUV的“Y”表示明亮度(Luminance或Luma),也就是灰階值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。
二、利用inrange函數(shù)過濾視頻中的顏色,實(shí)現(xiàn)對(duì)特定顏色的追蹤
代碼如下:
#視頻特定顏色追蹤 import cv2 as cv import numpy as np def extrace_object_demo(): capture=cv.VideoCapture("E:/imageload/video_example.mp4") while True: ret, frame = capture.read() if ret == False: break hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) #色彩空間由RGB轉(zhuǎn)換為HSV lower_hsv = np.array([100, 43, 46]) #設(shè)置要過濾顏色的最小值 upper_hsv = np.array([124, 255, 255]) #設(shè)置要過濾顏色的最大值 mask = cv.inRange(hsv, lower_hsv, upper_hsv) #調(diào)節(jié)圖像顏色信息(H)、飽和度(S)、亮度(V)區(qū)間,選擇藍(lán)色區(qū)域 cv.imshow("video",frame) cv.imshow("mask", mask) c = cv.waitKey(40) if c == 27: #按鍵Esc的ASCII碼為27 break extrace_object_demo() cv.destroyAllWindows()
運(yùn)行結(jié)果:
這里只放追蹤藍(lán)色部分的截圖,僅供參考
注意:
1.Opencv的inRange函數(shù):可實(shí)現(xiàn)二值化功能
函數(shù)原型:inRange(src,lowerb, upperb[, dst]) -> dst
函數(shù)的參數(shù)意義:第一個(gè)參數(shù)為原數(shù)組,可以為單通道,多通道。第二個(gè)參數(shù)為下界,第三個(gè)參數(shù)為上界
例如:mask = cv2.inRange(hsv, lower_blue, upper_blue)
第一個(gè)參數(shù):hsv指的是原圖(原始圖像矩陣)
第二個(gè)參數(shù):lower_blue指的是圖像中低于這個(gè)lower_blue的值,圖像值變?yōu)?55
第三個(gè)參數(shù):upper_blue指的是圖像中高于這個(gè)upper_blue的值,圖像值變?yōu)?55 (255即代表黑色)
而在lower_blue~upper_blue之間的值變成0 (0代表白色)
即:Opencv的inRange函數(shù)可提取特定顏色,使特定顏色變?yōu)榘咨?,其他顏色變?yōu)楹谏@樣就實(shí)現(xiàn)了二值化功能
2.HSV顏色對(duì)應(yīng)的RGB分量范圍表如下:(這里是三通道的)
三、通道的分離、合并以及某個(gè)通道值的修改
代碼如下:
#通道的分離與合并以及某個(gè)通道值的修改 import cv2 as cv src=cv.imread('E:\imageload\example.png') cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE) cv.imshow('first_image', src) #三通道分離形成單通道圖片 b, g, r =cv.split(src) cv.imshow("second_blue", b) cv.imshow("second_green", g) cv.imshow("second_red", r) # 其中cv.imshow("second_red", r)可表示為r = cv2.split(src)[2] #三個(gè)單通道合成一個(gè)三通道圖片 src = cv.merge([b, g, r]) cv.imshow('changed_image', src) #修改多通道里的某個(gè)通道的值 src[:, :, 2] = 0 cv.imshow('modify_image', src) cv.waitKey(0) cv.destroyAllWindows()
注意:
1.這里用到了opencv的split函數(shù)和merge函數(shù),實(shí)現(xiàn)通道的分離和合并。
2.cv.split函數(shù)分離出的b、g、r是單通道圖像
以上就是Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Python+OpenCV圖像處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Opencv圖像處理:如何判斷圖片里某個(gè)顏色值占的比例
- Python+OpenCV圖像處理——圖像二值化的實(shí)現(xiàn)
- Opencv圖像處理之詳解掩膜mask
- Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)
- 詳解python opencv、scikit-image和PIL圖像處理庫比較
- OpenCV圖像處理之常見的圖像灰度變換
- Python+OpenCV數(shù)字圖像處理之ROI區(qū)域的提取
- Opencv圖像處理之輪廓外背景顏色改變
- Python+OpenCV圖像處理——實(shí)現(xiàn)輪廓發(fā)現(xiàn)
- OpenCV+Qt實(shí)現(xiàn)圖像處理操作
相關(guān)文章
python利用thrift服務(wù)讀取hbase數(shù)據(jù)的方法
今天小編就為大家分享一篇python利用thrift服務(wù)讀取hbase數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程
這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08python從ftp下載數(shù)據(jù)保存實(shí)例
這篇文章主要介紹了python從ftp下載數(shù)據(jù)到本地保存的實(shí)例代碼方法,大家參考使用吧2013-11-11langchain使用自定義example?selector示例解析
這篇文章主要為大家介紹了langchain使用自定義example?selector示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python 解決數(shù)據(jù)庫寫入時(shí)float自動(dòng)變?yōu)檎麛?shù)的問題
這篇文章主要介紹了python 解決數(shù)據(jù)庫寫入時(shí)float自動(dòng)變?yōu)檎麛?shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Python實(shí)現(xiàn)解析ini配置文件的示例詳解
在開發(fā)過程中,配置文件是少不了的,而且配置文件是有專門的格式的,比如:ini,?yaml,?toml?等等。而對(duì)于?Python?而言,也都有相應(yīng)的庫來解析相應(yīng)格式的文件,下面我們來看看?ini?文件要如何解析2022-09-09Python使用自帶的ConfigParser模塊讀寫ini配置文件
這篇文章主要介紹了Python使用自帶的ConfigParser模塊讀寫ini配置文件的方法,ConfigParser中包含了對(duì)ini的節(jié)section的一些基本操作,使得改寫ini時(shí)非常簡(jiǎn)便,需要的朋友可以參考下2016-06-06