《OpenCV》 顏色空間

2021-09-25 04:42:56 字數 2007 閱讀 4961

opencv中匯集了150多種顏色顏色空間的轉變方法,接下來只看最常用的兩種,即bgr gray 和  bgr hsv

import cv2

# color-space轉變函式

cv2.cvtcolor(input_image, flag)

# 檢視顏色空間flag

flags = [i for i in dir(cv2) if i.startswith('color_')]

print flags

'''note:

對於hsv,hue(色調)範圍為[0,180],saturation(飽和度)範圍是[0,255],value範圍是[0,255]

不同的影象處理軟體下具有不同的範圍,

如果想將其他如ps中的影象(hue範圍是[0,360])與opencv下處理影象作比較時,要做一下歸一化

'''

hsv color-space相比rgb color-space更容易表示乙個顏色,以下應用中,將提取乙個黑色(外框)和乙個綠色(內框)的物件。

(2)每一幀從bgr轉換顏色空間到hsv

(3)閾值化hsv影象,將其分別閾值化在乙個綠色和黑色的範圍內

(4)分別提取出黑色目標和藍色目標,疊加mask合成

code:

import cv2

import numpy as np

cap = cv2.videocapture('../video/vid_20190710_165704.mp4')

ret, fm_0 = cap.read()

c = 1

timef = 5

# 黑色hsv範圍

hsv_black = np.uint8([[[0,0,0],[255,180,46]]])

# 綠色bgr範圍

gbr_green = np.uint8([[[13,94,64],[40,114,84]]])

# 綠色hsv範圍,將綠色bgr轉換到hsv

hsv_green = cv2.cvtcolor(gbr_green,cv2.color_bgr2hsv)

while ret:

ret, fm = cap.read()

if ret is true:

hsv_fm = cv2.cvtcolor(fm,cv2.color_bgr2hsv)

# 範圍閾值化

mask_black = cv2.inrange(hsv_fm,hsv_black[0,0],hsv_black[0,1])

mask_green = cv2.inrange(hsv_fm, hsv_green[0, 0], hsv_green[0, 1])

# 合成

mask = cv2.addweighted(mask_black,0.5,mask_green,0.5,1)

# 只提取藍色和黑色前景

res = cv2.bitwise_and(fm,fm,mask=mask)

if c % timef == 0:

cv2.namedwindow('res',cv2.window_normal)

cv2.imshow('res',res)

cv2.namedwindow('mask', cv2.window_normal)

cv2.imshow('mask',mask)

c = c+1

k = cv2.waitkey(10) & 0xff

if k == 27:

cv2.destroyallwindows()

cap.release()

# 注:此影象沒考慮去噪過程,隨後可將去噪新增進來

結果圖:

hsv顏色體系表:

opencv顏色空間轉換

使用工具python3.5 使用包cv2,numpy 涉及函式cv2.cvtcolor cv2.inrange 在 opencv 中有 超過150 種進行顏色空間轉換的方法。但是你以後就會發現我們經常用到的也就兩種 bgr gray 和 bgr hsv。我們用到的函式是cv2.cvtcolor in...

open CV顏色空間轉換

使用工具python3.5 使用包cv2,numpy 涉及函式cv2.cvtcolor cv2.inrange import cv2 import numpy as np cap cv2.videocapture 0 while 1 獲取每一幀 ret,frame cap.read 轉換到hsv h...

OpenCV中HSV顏色空間

opencv中實現bgr顏色空間想hsv顏色空間轉換的是cvcvtcolor h通道的值範圍為 0 180 s 0 255 v 0 255 後來發現了 cv bgr2hsv full cv bgr2hsv 在轉換影象的時候是將 h 2 h 我們知道影象中色相h的取值範圍為 0 360 所以利用ope...