https://mydreamambitious.blog.csdn.net/article/details/125249121
https://mydreamambitious.blog.csdn.net/article/details/125265431
https://mydreamambitious.blog.csdn.net/article/details/125339604
https://mydreamambitious.blog.csdn.net/article/details/125392536
https://mydreamambitious.blog.csdn.net/article/details/125340081
https://mydreamambitious.blog.csdn.net/article/details/125351256
frame=cv2.resize(src=frame,dsize=(750,500))
#提取感兴趣的区域
roi=frame[200:400,450:700]
mask=bgsegment.apply(roi)
#去掉视频mask中灰色的阴影
OK,mask=cv2.threshold(src=mask,thresh=245,maxval=255,type=cv2.THRESH_BINARY)
#查找轮廓
binary,contours,hierarchy=cv2.findContours(image=mask,mode=cv2.RETR_TREE,method=cv2.CHAIN_APPROX_SIMPLE)
#记录车子的位置
box=[]
#进行遍历筛选
for step,cont in enumerate(contours):
#计算面积
area=cv2.contourArea(cont)
if area>=150:
# cv2.drawContours(image=roi,contours=[cont],contourIdx=-1,
# color=(0,255,0),thickness=2)
#获取视频中物体的坐标和高宽
(x,y,w,h)=cv2.boundingRect(cont)
# #绘制矩阵(框柱物体)
cv2.rectangle(img=roi,pt1=(x,y),pt2=(x+w,y+h),color=(0,255,0),thickness=2)
# 显示FPS
endtime = time.time()
FPS = 1 / (endtime - startime)
cv2.putText(img=frame, text='FPS: ' + str(int(FPS)), org=(30, 450),
fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1.0,
color=(0, 255, 0), thickness=2)
import os
import cv2
import time
import numpy as np
# frame=np.zeros(shape=(450,450,3),dtype=np.uint8)
cap=cv2.VideoCapture('Video/DJ_1.mp4')
#去除背景
bgsegment=cv2.createBackgroundSubtractorMOG2(history=100,varThreshold=40)
#实例跟踪器
# trackers=cv2.MultiTracker_create()
# #使用的实例跟踪算法
# track_algorithm=cv2.TrackerKCF_create
#跟踪车子的一个全局ID
class_id=0
while cap.isOpened():
startime=time.time()
OK,frame=cap.read()
if OK==False:
break
frame=cv2.resize(src=frame,dsize=(750,500))
#提取感兴趣的区域
roi=frame[200:400,450:700]
mask=bgsegment.apply(roi)
#去掉视频mask中灰色的阴影
OK,mask=cv2.threshold(src=mask,thresh=245,maxval=255,type=cv2.THRESH_BINARY)
#进行开运算,将mask中的小物体都去掉
# kernel=cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(3,3))
# mask=cv2.morphologyEx(src=mask,op=cv2.MORPH_OPEN,kernel=kernel,iterations=1)
#查找轮廓
binary,contours,hierarchy=cv2.findContours(image=mask,mode=cv2.RETR_TREE,method=cv2.CHAIN_APPROX_SIMPLE)
#记录车子的位置
box=[]
#进行遍历筛选
for step,cont in enumerate(contours):
#计算面积
area=cv2.contourArea(cont)
if area>=150:
# cv2.drawContours(image=roi,contours=[cont],contourIdx=-1,
# color=(0,255,0),thickness=2)
#获取视频中物体的坐标和高宽
(x,y,w,h)=cv2.boundingRect(cont)
# #绘制矩阵(框柱物体)
cv2.rectangle(img=roi,pt1=(x,y),pt2=(x+w,y+h),color=(0,255,0),thickness=2)
# 显示FPS
endtime = time.time()
FPS = 1 / (endtime - startime)
cv2.putText(img=frame, text='FPS: ' + str(int(FPS)), org=(30, 450),
fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1.0,
color=(0, 255, 0), thickness=2)
cv2.imshow('image', frame)
cv2.imshow('roi', roi)
cv2.imshow('mask', mask)
key=cv2.waitKey(30)
if key==27:
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')
注明:读者在提取感兴趣的区域时,可以根据自己的视频来,因为我是根据自己的视频中的车子移动的位置来提取的。