2017-02-16 18 views
-1

Можете ли вы рассказать мне, как получить пороговое изображение с использованием разности кадров? У меня есть идея о различном методе вычитания фона, но я не хочу использовать их.Пороговое изображение с использованием вычитания изображений с использованием opencv python

cv2.substract (img1, img2) дает этот образ

substract: Screenshot

, но я хочу этот результат threshold Может кто-нибудь сказать мне, как это сделать

я DONOT хочу использовать cv2.createBackgroundSubtractorMOG2() или такая функция вида вот мои

import cv2 
import numpy as np 
t=0.01 
background=cv2.imread('background2.png') 
cap = cv2.VideoCapture('car.mp4') 
ret,img=cap.read() 

avg_img = np.float32(img) 
while 1: 
    ret,img=cap.read() 
    cv2.accumulateWeighted(img,avg_img,0.1) 
    res1 = cv2.convertScaleAbs(avg_img) 
    sub_img=cv2.subtract(res1,img) 
    cv2.imshow('sub_img',sub_img) 
    cv2.imshow('sub_img',sub_img) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 


cap.release() 
cv2.destroyAllWindows() 

Моя OpenCV версия 3.0.0 питон 2,7

+0

ли Вы должны использовать CV2? cv2 отлично подходит для алгоритмов обработки изображений, которые трудно реализовать, но в этом случае вычитание и пороговое значение очень просто в numpy. – PrestonH

+0

Не могли бы вы рассказать мне, как это сделать, используя numpy –

+0

См. Ответ ниже. – PrestonH

ответ

2

Так как вы хорошо с этим делается за пределами CV2:

# Subtraction, assuming img1 and img2 are numpy arrays with same dimension; optionally, use np.abs(img1-img2) if you don't care about the sign of the difference 
sub = img1 - img2 

# Thresholding 
threshold = 128 # Set your threshold value 
sub[sub >= threshold] = 255 # Above or equal threshold go to max value 
sub[sub < threshold] = 0  # Below threshold go to min value