opencv中有超過150種顏色空間轉換方法。但是我們將研究只有兩個最廣泛使用的,bgr↔gray和bgr↔hsv。
對於顏色轉換,我們使用cv函式。cvtcolor(input_image, flag),其中flag決定轉換的型別。
對於bgr→gray轉換,我們使用標誌cv.color_bgr2gray。類似地,對於bgr→hsv,我們使用標誌cv.color_bgr2hsv。要獲取其他標記,只需在python終端中執行以下命令:
>>
>
import cv2 as cv
>>
> flags =
[i for i in
dir(cv)
if i.startswith(
'color_')]
>>
>
print
( flags )
**注意:**hsv的色相範圍為[0,179],飽和度範圍為[0,255],值範圍為[0,255]。不同的軟體使用不同的規模。因此,如果你要將opencv值和它們比較,你需要將這些範圍標準化。
下面是詳細注釋的**:
import cv2 as cv
import numpy as np
cap = cv.videocapture(0)
while(1
):# 讀取幀
_, frame = cap.read(
)# 轉換顏色空間 bgr 到 hsv
hsv = cv.cvtcolor(frame, cv.color_bgr2hsv)
# 定義hsv中藍色的範圍
lower_blue = np.array(
[110,50
,50])
upper_blue = np.array(
[130
,255
,255])
# 設定hsv的閾值使得只取藍色
mask = cv.inrange(hsv, lower_blue, upper_blue)
# 將掩膜和影象逐畫素相加
res = cv.bitwise_and(frame, frame, mask = mask)
cv.imshow(
'frame'
, frame)
cv.imshow(
'mask'
, mask)
cv.imshow(
'res'
, res)
k = cv.waitkey(5)
&0xff
if k ==27:
break
cv.destroyallwindows(
)
下圖顯示了對藍色物件的跟蹤:
**注意:**影象中有一些噪點。我們以後想辦法如何刪除它們。
這是在stackoverflow.com上發現的乙個常見問題。它非常簡單,你可以使用相同的函式
cv.cvtcolor()。你只需傳遞你想要的bgr值,而不是傳遞影象。例如,要查詢綠色的hsv值,請在python終端中嘗試以下命令:
>>
> green = np.uint8([[
[0,255,0
]]])
>>
> hsv_green = cv.cvtcolor(green,cv.color_bgr2hsv)
>>
>
print
( hsv_green )[[
[60255255]]
]
基於python的opencv教程
第一次寫部落格,學習是要有輸入與輸出的,所謂教學相長。所以我想試著自己寫乙份教程,算是對自己的學習總結吧,部落格的排版比較直男,請湊合看吧。首先建議的ide是pycharm,opencv的庫直接pip安裝就好,最好大家有一定的python基礎。第一部分是關於圖象讀取和儲存。import cv2imp...
基於python的opencv學習
dst cv2.sobel src,ddept,dx,dy,ksize ddepth 影象的深度,一般設為 1ksize sobel運算元的大小 白到黑是正數,黑到白是負數,所有的負數都會被截斷為0,因此要使用convertscaleabs取絕對值2 拉普拉斯金字塔 1 低通濾波 2 縮小尺寸pyr...
基於Python的OpenCV人臉檢測
注意 本文只是人臉檢測,人臉識別的實現請參見本人另一篇部落格 基於opencv tensorflow keras實現人臉識別 提前做的準備 1 和說明 import cv2 as cv import numpy as np defface detect demo 人臉檢測函式 gray cv.cvt...