OpenCV2 / Python - Как игнорировать яркость с помощью функции сопоставления изображений
Моя цель - обнаружить движение на камере.
Приведенный ниже код работает, но иногда, когда изменяется яркость, он включает захват, как если бы было обнаружено движение.
from PIL import ImageGrab
import cv2
import time
import numpy
from os.path import expanduser
try:
import cPickle as pickle
except:
import pickle
def matchFrame(image1,image2):
origin = image1
origin=cv2.cvtColor(origin, cv2.COLOR_BGR2GRAY)
image = image2
result = cv2.matchTemplate(origin, image, cv2.TM_CCOEFF_NORMED)
minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(result)
threshold = 0.90
loc = numpy.where( result >= threshold)
if loc[0].size==0 and loc[1].size==0:
return False
else:
return True
def run():
cap = cv2.VideoCapture(0)
ret, firstframe = cap.read()
inc=0
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if matchFrame(firstframe,gray):
pass
else:
cv2.imwrite("path%s"%inc);
inc=inc+1
cv2.waitKey(1)
if __name__ == "\__main\__"
run()
Метод "matchFrame" используют cv2.matchTemplate(origin, image, cv2.TM_CCOEFF_NORMED)
сравнить изображение. Если они похожи, он возвращает False. Я уже пытался изменить порог, но это не работает.
Метод "запустить" предназначен для захвата видео и вызова метода выше, чтобы сравнить первый кадр с текущим кадром.
Я лично думаю, что это все о cv2.TM_CCOEFF_NORMED...
У вас есть какие-нибудь предложения?