Python 在视频中跨对象创建边界框
Opencv与Python! 我试图在视频中创建跨越对象的边界框。我已经使用了背景减法功能。我正在使用finContour函数。现在,代码检测视频中“总线”的边缘并创建一个边界框,但它也检测总线窗口的边缘并为每个窗口创建一个绑定框。我只需要在公共汽车对面拿一个包围盒就行了Python 在视频中跨对象创建边界框,python,opencv,find,contour,box,Python,Opencv,Find,Contour,Box,Opencv与Python! 我试图在视频中创建跨越对象的边界框。我已经使用了背景减法功能。我正在使用finContour函数。现在,代码检测视频中“总线”的边缘并创建一个边界框,但它也检测总线窗口的边缘并为每个窗口创建一个绑定框。我只需要在公共汽车对面拿一个包围盒就行了 import numpy as np import cv2 cap = cv2.VideoCapture("C:\\Python27\\clip1.avi") fgbg = cv2.BackgroundSubtractorMO
import numpy as np
import cv2
cap = cv2.VideoCapture("C:\\Python27\\clip1.avi")
fgbg = cv2.BackgroundSubtractorMOG()
while(1):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
# res,thresh = cv2.threshold(fgmask,127,255,0)
kernel = np.ones((10,10),np.uint8)
dilation = cv2.dilate(fgmask,kernel,iterations = 1)
erosion = cv2.erode(fgmask,kernel,iterations = 1)
contours,hierarchy = cv2.findContours(fgmask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for i in range(0, len(contours)):
if (i % 1 == 0):
cnt = contours[i]
x,y,w,h = cv2.boundingRect(cnt)
cv2.drawContours(fgmask ,contours, -1, (255,255,0), 3)
cv2.rectangle(fgmask,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('frame',fgmask)
cv2.imshow("original",frame)
if cv2.waitKey(30) == ord('a'):
break
第1章释放()
cv2.destroyAllWindows()
结果
一个快速的技巧可能是为框的区域设置特定的阈值,然后删除小的。循环所有边界框并合并重叠的边界框。我可以得到大的边界框,但它看起来有点像编辑过的图片。尽管我正在扩张和侵蚀它,但它并没有像预期的那样到来!好吧,你是说它有点移位了??正确的??Ok BackgroundSubtractorMOG将返回一幅图像,其中图像中运动的部分将为白色,因此它将稍微向其运动方向移动
import cv2
import numpy as np
#img.png is the fgmask
img=cv2.imread('img.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,th1 = cv2.threshold(gray,25,255,cv2.THRESH_BINARY)
_,contours,hierarchy = cv2.findContours(th1, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('image1',img)
cv2.waitKey(0)
cv2.destoryAllWindows(0)