python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...
一、色彩空間的轉換
代碼如下:
#色彩空間轉換
import cv2 as cv
def color_space_demo(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB轉換為GRAY 這里的GRAY是單通道的
cv.imshow("gray", gray)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) #RGB轉換為HSV
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(img, cv.COLOR_RGB2YUV) #RGB轉換為YUV
cv.imshow("yuv",yuv)
Ycrcb = cv.cvtColor(img, cv.COLOR_RGB2YCrCb) #RGB轉換為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()
運行結果:
1.RGB就是指Red,Green和Blue,一副圖像由這三個channel(通道)構成
2.Gray就是只有灰度值一個channel。
3.HSV即Hue(色調),Saturation(飽和度)和Value(亮度)三個channel
切記(純屬個人理解):
1.百度百科說,將原來的RGB(R,G,B)中的R,G,B統一按照一種轉換關系用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰度圖。
2.opencv里,COLOR_RGB2GRAY是將三通道RGB對象轉換為單通道的灰度對象。
3.將單通道灰度對象轉換為 RGB 時,生成的RGB對象的每個通道的值是灰度對象的灰度值。
RGB是為了讓機器更好的顯示圖像,對于人類來說并不直觀,HSV更為貼近我們的認知,所以通常我們在針對某種顏色做提取時會轉換到HSV顏色空間里面來處理.
補注:
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函數過濾視頻中的顏色,實現對特定顏色的追蹤
代碼如下:
#視頻特定顏色追蹤
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轉換為HSV
lower_hsv = np.array([100, 43, 46]) #設置要過濾顏色的最小值
upper_hsv = np.array([124, 255, 255]) #設置要過濾顏色的最大值
mask = cv.inRange(hsv, lower_hsv, upper_hsv) #調節圖像顏色信息(H)、飽和度(S)、亮度(V)區間,選擇藍色區域
cv.imshow("video",frame)
cv.imshow("mask", mask)
c = cv.waitKey(40)
if c == 27: #按鍵Esc的ASCII碼為27
break
extrace_object_demo()
cv.destroyAllWindows()
運行結果:
這里只放追蹤藍色部分的截圖,僅供參考
注意:
1.Opencv的inRange函數:可實現二值化功能
函數原型:inRange(src,lowerb, upperb[, dst]) -> dst
函數的參數意義:第一個參數為原數組,可以為單通道,多通道。第二個參數為下界,第三個參數為上界
例如:mask?=?cv2.inRange(hsv,?lower_blue,?upper_blue)
第一個參數:hsv指的是原圖(原始圖像矩陣)
第二個參數:lower_blue指的是圖像中低于這個lower_blue的值,圖像值變為255
第三個參數:upper_blue指的是圖像中高于這個upper_blue的值,圖像值變為255 (255即代表黑色)
而在lower_blue~upper_blue之間的值變成0 (0代表白色)
即:Opencv的inRange函數可提取特定顏色,使特定顏色變為白色,其他顏色變為黑色,這樣就實現了二值化功能
2.HSV顏色對應的RGB分量范圍表如下:(這里是三通道的)
三、通道的分離、合并以及某個通道值的修改
代碼如下:
#通道的分離與合并以及某個通道值的修改
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]
#三個單通道合成一個三通道圖片
src = cv.merge([b, g, r])
cv.imshow('changed_image', src)
#修改多通道里的某個通道的值
src[:, :, 2] = 0
cv.imshow('modify_image', src)
cv.waitKey(0)
cv.destroyAllWindows()
注意:
1.這里用到了opencv的split函數和merge函數,實現通道的分離和合并。
2.cv.split函數分離出的b、g、r是單通道圖像
以上就是Python+OpenCV圖像處理—— 色彩空間轉換的詳細內容,更多關于Python+OpenCV圖像處理的資料請關注我們其它相關文章!
本文標題: Python+OpenCV圖像處理—— 色彩空間轉換
本文地址: http://www.cppcns.com/jiaoben/python/356831.html
總結
以上是生活随笔為你收集整理的python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 葫芦在五帝钱上好还是下好?
- 下一篇: python根据一个基类生成派生类_将基