opencv中有超過150種顏色空間轉換方法。但是我們將研究只有兩個最廣泛使用的,bgr↔灰色和bgr↔hsv。
對於顏色轉換,我們使用cv函式。cvtcolor(input_image, flag),其中flag決定轉換的型別。
對於bgr→灰度轉換,我們使用標誌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值和它們比較,你需要將這些範圍標準化。現在我們知道了如何將bgr影象轉換成hsv,我們可以使用它來提取乙個有顏色的物件。在hsv中比在bgr顏色空間中更容易表示顏色。在我們的應用程式中,我們將嘗試提取乙個藍色的物件。方法如下:
轉換從bgr到hsv顏色空間
我們對hsv影象設定藍色範圍的閾值
現在單獨提取藍色物件,我們可以對影象做任何我們想做的事情。
下面是詳細注釋的**:
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]]
]
嘗試找到一種方法來提取多個彩色物件,例如,同時提取紅色,藍色,綠色物件。
歡迎關注磐創部落格資源彙總站:
歡迎關注pytorch官方中文教程站:
opencv中文官方文件:
Android EditText 改變邊框顏色
第一步 為了更好的比較,準備兩個一模一樣的edittext 當activity啟動時,焦點會在第乙個edittext上,如果你不希望這樣只需要寫乙個高度和寬頻為0的edittext即可避免,這裡就不這麼做了 如下 html view plain copy edittext android layou...
MapXtremE 中改變feature顏色
1.c code mapinfo.data.table table mapinfo.engine.session.current.catalog.opentable c programfiles mapinfo mapxtreme2004 maps north america usa.tab thi...
關於jquery jqgrid 改變行背景顏色
在做專案工程中,遇到過客戶要求在同一行上的兩個列值不等時,標記顏色,用於馬上定位到這一行的值不相等 如下是具體實現 首先,在jqgrid的gridcomplete中載入一下方法 gridcomplete function 資料載入完成後,如果 兩特定列值不等時,則記錄在列表中用粉紅色表示 funct...