2016-02-21 3 views
0

Opencv с Python! Я пытаюсь создать ограничивающие коробки по объектам в видео. Я уже использовал функцию вычитания фона. Я использую функцию finContour. Теперь код обнаруживает края «шины» в видео и создает ограничивающий прямоугольник, но он также обнаруживает края окон шины и создает поле для склеивания для каждого окна. Мне просто нужно получить ограничительную коробку через автобус.Создание ограничительной рамки через объект в видео

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 

cap.release() cv2.destroyAllWindows()

enter image description here enter image description here

+0

Быстрый трюк может быть положить определенную THR eshold (s) для области коробок и сбросить маленькие. – Reza

+0

перебирать все ограничивающие прямоугольники и комбинировать перекрывающиеся ограничивающие прямоугольники. – Micka

ответ

0
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) 

РЕЗУЛЬТАТЫ

enter image description here

+0

Я могу получить большую ограничительную рамку, но она выглядит как отредактированный рис. Несмотря на то, что я расширяю и разлагаю его, это не так, как ожидалось! –

+0

ОК, вы говорите, что это немного смещено ??? правильно?? Ok BackgroundSubtractorMOG вернет вам изображение, в котором части изображения, находящиеся в движении, будут белого цвета, поэтому он будет немного смещен в направлении его перемещения – Arijit

Смежные вопросы