OpenCV3.0+Python3.6實(shí)現(xiàn)特定顏色的物體追蹤
一、環(huán)境
win10、Python3.6、OpenCV3.x;編譯器:pycharm5.0.3
二、實(shí)現(xiàn)目標(biāo)
根據(jù)需要追蹤的物體顏色,設(shè)定閾值,在視頻中框選出需要追蹤的物體。
三、實(shí)現(xiàn)步驟
1)根據(jù)需要追蹤的物體顏色,設(shè)定顏色閾值,獲取追蹤物體的掩膜
代碼:generate_threshold.py
# -*- coding : utf-8 -*-
# Author: Tom Yu
import cv2
import numpy as np
cap = cv2.VideoCapture(0)#獲取攝像頭圖像
# img = cv2.imread("timg1.jpg")
# hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
def nothing(x):
pass
def createbars():
"""
實(shí)現(xiàn)創(chuàng)建六個(gè)滑塊的作用,分別控制H、S、V的最高值與最低值
"""
cv2.createTrackbar("H_l","image",0,180,nothing)
cv2.createTrackbar("H_h","image",0,180,nothing)
cv2.createTrackbar("S_l","image",0,255,nothing)
cv2.createTrackbar("S_h","image",0,255,nothing)
cv2.createTrackbar("V_l","image",0,255,nothing)
cv2.createTrackbar("V_h","image",0,255,nothing)
cv2.namedWindow("image")
createbars()#創(chuàng)建六個(gè)滑塊
lower = np.array([0,0,0])#設(shè)置初始值
upper = np.array([0,0,0])
while True:
ret,frame = cap.read()
hsv_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#將圖片由BGR顏色空間轉(zhuǎn)化成HSV空間,HSV可以更好地分割顏色圖形
lower[0]=cv2.getTrackbarPos("H_l","image")#獲取"H_l"滑塊的實(shí)時(shí)值
upper[0]=cv2.getTrackbarPos("H_h","image")#獲取"H_h"滑塊的實(shí)時(shí)值
lower[1]=cv2.getTrackbarPos("S_l","image")
upper[1]=cv2.getTrackbarPos("S_h","image")
lower[2]=cv2.getTrackbarPos("V_l","image")
upper[2]=cv2.getTrackbarPos("V_h","image")
mask = cv2.inRange(hsv_frame,lower,upper)#cv2.inrange()函數(shù)通過設(shè)定的最低、最高閾值獲得圖像的掩膜
cv2.imshow("img",frame)
cv2.imshow("mask",mask)
if cv2.waitKey(1)&0xff == 27:
break
cv2.destroyAllWindows()
實(shí)現(xiàn)效果:獲取需要追蹤的物體顏色閾值

2)根據(jù)獲取到的閾值,設(shè)定閾值范圍,在視頻中追蹤特定顏色的物體并用框選框出所需追蹤的物體
代碼:tracking_object.py
# -*- coding : utf-8 -*-
# Author: Tom Yu
import cv2
import numpy as np
cap = cv2.VideoCapture(0)#獲取攝像頭視頻
while True:
ret,frame = cap.read()#讀取每一幀圖片
hsv_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#將每一幀圖片轉(zhuǎn)化HSV空間顏色
"""
依據(jù)之前的腳本獲取的閾值設(shè)置最高值與最低值
"""
lower = np.array([0,104,205])
upper = np.array([15,208,255])
mask = cv2.inRange(hsv_frame,lower,upper)
img,conts,hier = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#找出邊界
cv2.drawContours(frame,conts,-1,(0,255,0),3)#畫出邊框
dst = cv2.bitwise_and(frame,frame,mask=mask)#對(duì)每一幀進(jìn)行位與操作,獲取追蹤圖像的顏色
#cv2.imshow("mask",mask)
#cv2.imshow("dst",dst)
cv2.imshow("frame",frame)
if cv2.waitKey(1)&0xff == 27:
break
cv2.destroyAllWindows()
實(shí)現(xiàn)效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
人臉識(shí)別實(shí)戰(zhàn)之Opencv+SVM實(shí)現(xiàn)人臉識(shí)別
這篇文章主要介紹了通過Opencv+SVM實(shí)現(xiàn)人臉識(shí)別功能,文中的示例代碼介紹詳細(xì),對(duì)于我們學(xué)習(xí)人臉識(shí)別和OpenCV都有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12
Python MySQLdb 執(zhí)行sql語句時(shí)的參數(shù)傳遞方式
這篇文章主要介紹了Python MySQLdb 執(zhí)行sql語句時(shí)的參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python數(shù)據(jù)庫(kù)操作指南之PyMysql使用詳解
PyMySQL是在Python3.x版本中用于連接MySQL服務(wù)器的一個(gè)庫(kù),Python2 中則使用mysqldb,下面這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)庫(kù)操作指南之PyMysql使用的相關(guān)資料,需要的朋友可以參考下2023-03-03
教你使用Python?的?Template?類生成文件報(bào)告
這篇文章主要介紹了用?Python?的?Template?類生成文件報(bào)告,在閱讀本文時(shí),您不僅學(xué)習(xí)了Python字符串的基本知識(shí),Template類以及使用它的原因,而且還實(shí)現(xiàn)了第一個(gè)文件報(bào)告腳本,需要的朋友可以參考下2022-08-08
Python簡(jiǎn)單實(shí)現(xiàn)安全開關(guān)文件的兩種方式
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)安全開關(guān)文件的兩種方式,涉及Python的try語句針對(duì)錯(cuò)誤的判定與捕捉相關(guān)技巧,需要的朋友可以參考下2016-09-09

