Sunday, 25 January 2015

Background Subtraction Tracking

Below code is implementation of the code in below link using opencv 3
https://bitbucket.org/ElissonMichael/tcc_implementacao/raw/595d58fe68e4b8ee49b211c904e28be1533c8efc/Background/NoBackgroundCam.py

Corresponding video at
https://www.youtube.com/watch?v=KRKKektCcok

import numpy as np
import cv2
maiorArea = 0
cap = cv2.VideoCapture(0)

if not(cap.isOpened()):
    cap.open()

while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow("Webcam", frame)
    bkg=frame.copy()
    fundo = cv2.GaussianBlur(bkg,(3,3),0)
    print("OK")
    if cv2.waitKey(1) == 32:
        cv2.destroyWindow("Webcam")
        break
       
while True:
    ret, imagem = cap.read()
    mascara=imagem.copy()
    cinza=imagem.copy()
    #cv2.imshow("Webcam", imagem)
    imagem = cv2.GaussianBlur(imagem,(3,3),0)
    cv2.absdiff(imagem,fundo,mascara)
    gray = cv2.cvtColor(mascara, cv2.COLOR_BGR2GRAY)
    ret,thresh1 = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    kernel = np.ones((3,3),np.uint8)
    dilated = cv2.dilate(thresh1,kernel,iterations = 18)
    cinza = cv2.erode(dilated,kernel,iterations = 10)
    _,contorno,heir=cv2.findContours(cinza,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    for cnt in contorno:
        vertices_do_retangulo = cv2.boundingRect(cnt)
        if (cv2.contourArea(cnt)> maiorArea):
            maiorArea = cv2.contourArea(cnt)
            retangulo_de_interesse = vertices_do_retangulo
           
        ponto1 = (retangulo_de_interesse[0], retangulo_de_interesse[1])
        ponto2 = (retangulo_de_interesse[0] + retangulo_de_interesse[2], retangulo_de_interesse[1] + retangulo_de_interesse[3])
        cv2.rectangle(imagem, ponto1, ponto2,(0,0,0), 2)
        cv2.rectangle(cinza, ponto1, ponto2, (255,255,255), 1)
        largura = ponto2[0] - ponto1[0]
        altura = ponto2[1] - ponto1[1]
        cv2.line(cinza,(ponto1[0]+largura/2,ponto1[1]),(ponto1[0]+largura/2,ponto2[1]),(255,255,255), 1)
        cv2.line(cinza,(ponto1[0],ponto1[1]+altura/2),(ponto2[0],ponto1[1]+altura/2), (255,255,255), 1)

    cv2.imshow("Mascara", mascara)
    cv2.imshow("Cinza", cinza)
   
    cv2.imshow("Webcam", imagem)
    cv2.imshow("Dilated", thresh1)
    #cv2.imshow("Fundo", dilated)
    if cv2.waitKey(1) & 0xFF == ord('q'):
            break
   

# Release everything if job is finished
cap.release()
cv2.destroyAllWindows()



OR

for cnt in contorno:
        vertices_do_retangulo = cv2.minAreaRect(cnt)
        if (cv2.contourArea(cnt)> maiorArea):
            maiorArea = cv2.contourArea(cnt)
            retangulo_de_interesse = cv2.boxPoints(vertices_do_retangulo)
            retangulo_de_interesse = np.int0(retangulo_de_interesse)
            cv2.drawContours(imagem,[retangulo_de_interesse],-1,(0,0,0), 2)
            cv2.drawContours(cinza,[retangulo_de_interesse],-1,(255,255,255), 1)

OR

import numpy as np
import cv2
maiorArea = 0
cap = cv2.VideoCapture(0)

if not(cap.isOpened()):
    cap.open()

while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow("Webcam", frame)
    bkg=frame.copy()
    fundo = cv2.blur(bkg,(5,5))
    print("OK")
    if cv2.waitKey(1) == 32:       
        break
       
while True:
    ret, imagem = cap.read()
    mascara=imagem.copy()
    cinza=imagem.copy()
    #cv2.imshow("Webcam", imagem)
    imagem = cv2.blur(imagem,(5,5))
    cv2.absdiff(imagem,fundo,mascara)
    gray = cv2.cvtColor(mascara, cv2.COLOR_BGR2GRAY)
    ret,thresh1 = cv2.threshold(gray,100,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
    cinza = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel)
    cinza = cv2.blur(cinza, (9,9))
    _,contorno,heir=cv2.findContours(cinza,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    for cnt in contorno:
        vertices_do_retangulo = cv2.boundingRect(cnt)
        if (cv2.contourArea(cnt)> maiorArea):
            maiorArea = cv2.contourArea(cnt)
            retangulo_de_interesse = vertices_do_retangulo
           
        ponto1 = (retangulo_de_interesse[0], retangulo_de_interesse[1])
        ponto2 = (retangulo_de_interesse[0] + retangulo_de_interesse[2], retangulo_de_interesse[1] + retangulo_de_interesse[3])
        cv2.rectangle(imagem, ponto1, ponto2,(0,0,0), 2)
        cv2.rectangle(cinza, ponto1, ponto2, (255,255,255), 1)
        largura = ponto2[0] - ponto1[0]
        altura = ponto2[1] - ponto1[1]
        cv2.line(cinza,(ponto1[0]+largura/2,ponto1[1]),(ponto1[0]+largura/2,ponto2[1]),(255,255,255), 1)
        cv2.line(cinza,(ponto1[0],ponto1[1]+altura/2),(ponto2[0],ponto1[1]+altura/2), (255,255,255), 1)

       
 
    cv2.imshow("Mascara", mascara)
    cv2.imshow("Cinza", cinza)
   
    cv2.imshow("Webcam", imagem)
    #cv2.imshow("Thresholded", thresh1)
    #cv2.imshow("Fundo", fundo)
    if cv2.waitKey(1) & 0xFF == ord('q'):
            break
   

# Release everything if job is finished
cap.release()
cv2.destroyAllWindows()




No comments:

Post a Comment