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