Обнаружение стабильных пикселей в узком диапазоне (для стационарных объектов) - PullRequest
0 голосов
/ 09 июля 2019

Я новичок в opencv, чего я хочу добиться, это обнаруживать только неподвижные объекты, то есть объекты, которые не движутся.Давайте предположим, что по сценарию автомобиль внезапно останавливается на шоссе, которое ограничено.

Так что, если автомобиль останавливается, предположим, что x нет.затем, в этом случае, я хочу обнаружить, что этот объект не имеет значения, это даже машина, грузовик или даже собачка.

Мой план - обнаружить стабильный пиксель, а затем сравнить его с другим кадром пикселейв небольшом диапазоне (предположим, что ± 15) из-за некоторого шума камеры или чего-либо еще, мы не получим стабильные пиксели вообще.

Я написал некоторый код, пожалуйста, помогите мне сравнить пиксели с пикселями другого кадраили всегда приветствуется лучшее решение .

import numpy as np
import cv2
import imutils

cap = cv2.VideoCapture(0)

fgbg = cv2.createBackgroundSubtractorMOG2()

# first_frame = cv2.imread("Road1.jpg")
_,first_frame = cap.read()
first_gray = cv2.cvtColor(first_frame, cv2.COLOR_BGR2GRAY) #conver to gray

first_gray = cv2.GaussianBlur(first_gray, (5, 5), 0)

while(1):
    _, frame = cap.read()

    gray_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    blurFrame = cv2.GaussianBlur(gray_frame, (5, 5), 0)

    diff = cv2.absdiff(first_gray, blurFrame)

    _,diff = cv2.threshold(diff, 60, 255, cv2.THRESH_BINARY)

    thresh = cv2.erode(diff, None, iterations=2)

    thresh = cv2.dilate(thresh, None, iterations=2)

    contours,_ = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    print("new frame")

    for contour in contours:

        if( cv2.contourArea(contour) > 100):
            rect = (cv2.boundingRect(contour))
            print(rect)

            cv2.drawContours(frame, contour, -1, (0,255,0), 2)


    orgFrame = cv2.resize(frame, (300, 300))

    diffFrame = cv2.resize(diff, (300, 300))

    cv2.imshow('frameBlur',orgFrame)
    cv2.imshow('diffFrameBlur',diffFrame)

    k = cv2.waitKey(1) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...