在狭窄范围内(对于静止物体)检测稳定像素

时间:2019-07-09 04:57:19

标签: python numpy opencv artificial-intelligence object-detection

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

0 个答案:

没有答案