我是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()