Я новичок в 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()