基本运动检测-python3

问题描述

我正在尝试制作一个基本的运动检测程序 它给出了多个错误。 你能解释一下为什么会这样吗? 如果你也能解释一下,那将是一个很大的帮助..

这是程序:-

from imutils.video import VideoStream      
import argparse                            
import datetime                            
import imutils                              
import time
import cv2                                


ap = argparse.ArgumentParser()
ap.add_argument("-v","--video",help="Path of video file" )
ap.add_argument("-a","--min-area",type=int,default=500,help="Minimum area size")
args=vars(ap.parse_args())


#if the video argument is none,so start webcam
if args.get("video",None) is None:
    vs = VideoStream(scr=0).start()
    time.sleep(2.0)


# otherwise read from video file
else:
    vs = cv2.VideoCapture(args["video"])

# inititaizing the first frame
firstFrame = None

#loop for frames of vid
while True:
    frame=vs.read()
    frame=frame if args.get("video",None) is None else frame[1]
    text = "no motion is dectected"

    #if wew can read file,then end the vid
    if frame is None:
        break


    #resixing the frame
    frame = imutils.resize(frame,width=500)
    gray = cv2.cvtColor(frame,cv2.COLOR_BAYER_BG2BGR)          <<------------- line 42--------------
    gray = cv2.GaussianBlur(gray,(21,21),0)          #avg pixel intensity to smooth frame


    #if first is none
    if firstFrame is None:
        firstFrame = gray
        continue

    #to compair the absolute diffrence b/w the current and the first frame,which is stored
    frameDelta = cv2.absdiff(firstFrame,gray)
    thresh = cv2.threshold(frameDelta,25,255,cv2.THRESH_BINARY)[1]


    #dilate the threshold image to fill in holes,then find contours on thresholded image
    thresh = cv2.dilate(thresh,None,iterations=2)
    cnts = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)

    #loop the counters
    for c in cnts:
        #if counter is too small,ignor them
        if cv2.contourArea(c) < args["min_area"]:

            #compute it,update text accordingly
            (x,y,w,h) = cv2.boundingRect(c)
            cv2.rectangle(frameDelta,(x,y),(x+w,y+h),(0,0),2)
            text = "Motion is dected"
        else:
            pass
        font = cv2.FONT_HERSHEY_SIMPLEX 
        cv2.putText(frame,'{+} Room Status: %s' % (text),(10,20),cv2.FONT_HERSHEY_SIMPLEX,0.5,255),2)
        cv2.imshow('Security Feed',frame)
        cv2.imshow('Threshold(foreground mask)',dilate_image)
        cv2.imshow('Frame_delta',frame_delta)

        key = cv2.waitKey(1) & 0xFF # (1) = time delay in seconds before execution,and 0xFF takes the last 8 bit to check value or sumin
        if key == ord('q'):
            cv2.destroyAllWindows()
            break
#clear up screen
vs.stop() if args.get("video",None) is None else vs.release()
cv2.destroyAllWindows()

错误是:

文件“f:\projects\python\motion detection.py”,第 42 行,在 灰色 = cv2.cvtColor(框架,cv2.COLOR_BAYER_BG2BGR) cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-hhhrywxd\opencv\modules\imgproc\src\demosaicing.cpp:1721: 错误: ( -215:断言失败) scn == 1 && (dcn == 3 || dcn == 4) in function 'cv::demosaicing'

File "f:\projects\python\motion detection.py",line 42,in <module>
    gray = cv2.cvtColor(frame,cv2.COLOR_BAYER_BG2BGR)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-hhhrywxd\opencv\modules\imgproc\src\demosaicing.cpp:1721: error: (-215:Assertion failed) scn == 1 && (dcn == 3 || dcn == 4) in function 'cv::demosaicing'

感谢您的帮助!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)