物體跟蹤
現(xiàn)在我們知道怎樣將一幅圖像從 BGR 轉(zhuǎn)換到 HSV 了,我們可以利用這一點來提取帶有某個特定顏色的物體。在 HSV 顏色空間中要比在 BGR 空間中更容易表示一個特定顏色。在我們的程序中,我們要提取的是一個藍色的物體。下面就是就是我們要做的幾步:
? 從視頻中獲取每一幀圖像
? 將圖像轉(zhuǎn)換到 HSV 空間
? 設(shè)置 HSV 閾值到藍色范圍。
? 獲取藍色物體,當然我們還可以做其他任何我們想做的事,比如:在藍色物體周圍畫一個圈。文章來源:http://www.zghlxwxcb.cn/news/detail-637631.html
import numpy as np
import cv2
# cv2.cvtColor(img, flag)
# cv2.inRange()
# 打印顏色轉(zhuǎn)換flag
flags =[ i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
# OpenCV支持超過150種顏色轉(zhuǎn)換的方法,常用:BGR<->GRAY 和 BGR<->HSV
# OpenCV的HSV格式中,H(色彩/色度)的取值范圍是[0, 179], S(飽和度)的取值范圍[0, 255], V(亮度)的取值范圍[0, 255]
# 不同軟件取值范圍可能不同,使用時需要做歸一化
# 物體跟蹤,跟蹤一個藍色物體,步驟:
# 1.從視頻中獲取一幀圖像
# 2.將圖像轉(zhuǎn)換到HSV空間
# 3.設(shè)置HSV閥值到藍色范圍
# 4.獲取藍色物體,或其他處理
cap = cv2.VideoCapture(0)
while True:
# 獲取圖像幀
(ret, frame) = cap.read()
# 轉(zhuǎn)換到HSV顏色空間
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 設(shè)定藍色的閥值
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
# 根據(jù)閥值構(gòu)建掩膜
mask = cv2.inRange(hsv, lower_blue, upper_blue)
mask_blue = cv2.medianBlur(mask, 7) # 中值濾波
# 查找輪廓
contours, hierarchy = cv2.findContours(mask_blue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# print(contours, hierarchy)
for cnt in contours:
(x, y, w, h) = cv2.boundingRect(cnt)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, "Blue", (x, y - 5), font, 0.7, (0, 255, 0), 2)
# 對原圖和掩膜進行位運算
res =cv2.bitwise_and(frame, frame, mask=mask)
# 顯示圖像
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(5)&0xFF
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
文章來源地址http://www.zghlxwxcb.cn/news/detail-637631.html
到了這里,關(guān)于Python-OpenCV中的圖像處理-物體跟蹤的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!