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...

У вас есть какие-нибудь предложения?

0 ответов

Другие вопросы по тегам