簡體   English   中英

使用開放式CV在Python中進行背景提取

[英]Background extraction in Python using open CV

我正在嘗試從視頻中提取背景圖像,以便可以檢測其中的移動物體。 我發現了像cv2.BackgroundSubtractorMOG()這樣的函數,但是我無法使其正常工作。 有人使用過它嗎?

我創建了對象mog = cv2.BackgroundSubtractorMOG(300,-1,-1,-1)

然后我嘗試mog.apply(Nmat,Nforemat,-1) ,但這似乎不起作用,出現以下錯誤:

...... \\ OpenCV-2.4.0 \\ modules \\ video \\ src \\ bgfg_gaussmix.cpp:117:錯誤:(-215)CV_MAT_DEPTH(frameType)== CV_8U

Nmat和N foremat是numpy數組,因為如果沒有,我也會遇到錯誤。

這是正在進行的工作...

import cv
import cv2
import numpy as np

if __name__ == '__main__':
  cv.NamedWindow("test1", cv.CV_WINDOW_AUTOSIZE)
  cv.NamedWindow("test2", cv.CV_WINDOW_AUTOSIZE)
  capture = cv.CreateFileCapture('test.avi')
  frame = cv.QueryFrame(capture)

  img = cv.CreateImage(cv.GetSize(frame),8,1)
  thresh = cv.CreateImage(cv.GetSize(frame),8,1)
  foreground = cv.CreateImage(cv.GetSize(frame),8,1)
  foremat = cv.GetMat(foreground)
  Nforemat = np.array(foremat, dtype=np.float32)

  thresh = cv.CreateImage(cv.GetSize(img),8,1)
  mog = cv2.BackgroundSubtractorMOG()

  loop = True
  nframes=0
  while(loop):
    frame = cv.QueryFrame(capture)
    mat = cv.GetMat(frame)
    Nmat = np.array(mat, dtype=np.float32)

    cv.CvtColor(frame,img,cv.CV_BGR2GRAY)

    if (frame == None):
        break

    mog.apply(Nmat,Nforemat,-1)
    cv.Threshold(img,thresh,100,255,cv.CV_THRESH_BINARY)

    cv.ShowImage("test1", thresh)
    cv.ShowImage("test2",frame)
    char = cv.WaitKey(50)
    if (char != -1):
        if (char == 27):
                break
  cv.DestroyWindow("test1")
  cv.DestroyWindow("test2")

更改

Nmat = np.array(mat, dtype=np.float32)

對於

Nmat = np.array(mat, dtype=np.uint8)

您為什么使用這些行:

thresh = cv.CreateImage(cv.GetSize(img),8,1)

cv.Threshold(img,thresh,100,255,cv.CV_THRESH_BINARY)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM