2015-02-06 2 views
1

나는 아주 간단하게하려고합니다 : 객체 추적 용 비디오에서 bg 이미지를 빼는 것입니다. 나는 이미지가 다음과 같이 서로 단순하게 뺄 수 있음을 이해했다. img3 = img2 - img1. 그러나 한 이미지로 간단하게 시작할 때도 검은 선을 추가하고 img2로 저장하면 img3이 그 선을 표시하지 않습니다. 내가 노호을 img1 및 IMG2 다음과 같은 코드opencv로 파이썬에서 두 개의 비디오 프레임을 빼는 방법

import cv2 
img1 = cv2.imread("img1.png") 
img2 = cv2.imread("img2.png") 
img3 = img2 - img1 
cv2.imwrite("img3.png",img3) 

를 실행하면 :

Img1 Img2

내가 대신 오른쪽에있는 이미지, 아래 왼쪽에있는 이미지를 얻을 : img3 im3wanted

비디오에서 배경 추출을 위해이 방법을 사용하고 싶습니다. emtpy 장면을 보여주는 bg 이미지 파일과 때로는 객체가 화면 안팎으로 움직이는 동일한 장면을 보여주는 비디오가 있습니다. 나는 다음과 같은 코드를 사용하지만, 유사 장면없이 볼 단지 객체 대신 B/W의 이미지를 얻을 ..

import cv2 
import numpy as np 
from PIL import Image 

capture = cv2.VideoCapture("video.mov")  
while True: 
    f, frame = capture.read() 
    frame = cv2.GaussianBlur(frame,(15,15),0) 
    frame = frame - bg 
    cv2.imshow("window", frame) 

추신 : 나는 자동 배경 공제에 대해 알고하지만 난 아주 좋은 배경 파일과 매우 명확 비어 있습니다 매우 명백한 물체를 가진 장면이 이렇게 쉽게 작동해야한다고 생각했습니다!

업데이트 : 필자는 두 이미지로 원하는 것을 얻는 데 효과가있는 PIL ImageChops 차이 기능에 대해 알아 냈지만 opencv로 연 비디오에는 사용할 수없는 것으로 보입니다. 또한 numpy 배열을 사용하여 ImageChops.difference (img1, img2)를 수동으로 수행 할 수 있습니까?

답변

1

가장 가까운에이 코드를 사용하여 얻을 수있는 결과 예상 :

img3 = 255 - cv2.absdiff(img1,img2) 

이 코드는 당신이 줄 것이다 :
enter image description here
주를 그 만 cv2.absdiff(img1,img2)이 결과의 oposite을 줄 것이다 사용 기본적으로 있기 때문에 이 작업은 두 이미지의 차이점을 알려줍니다. 어떤 위치에 차이가 없으면 결과 (이 위치의 int)는 0입니다.
"완벽한 결과"(정확히 예상 한 것)를 얻으려면 일부 thresholding (또는 다른 종류의 이미지의 왼쪽 부분을 지우는 필터).

관련 문제