2016-07-03 11 views
-2

私のPythonコードで何が問題なのですか? 5行目の "Mat frame"、13行目の "std"に構文エラーがあります。このコードはもともとC++のものでしたが、Pythonに変換しました。動き検出+輪郭(Python)

import numpy as np 
import cv2 

def run_main(): 
    cv2.Mat frame 
    cv2.Mat back 
    cv2.Mat fore 
    cv2.VideoCapture cap(0) 
    cv2.BackgroundSubtractorMOG2 bg 
    bg.nmixtures = 3 
    bg.bShadowDetection = false 

    std::vector<std::vector<cv::Point> > contours; 

    cv2.namedWindow("Frame") 
    cv2.namedWindow("Background") 

    while True: 
     cap >> frame; 
     bg.operator()(frame,fore) 
     bg.getBackgroundImage(back) 
     cv2.erode(fore,fore,cv2.Mat()) 
     cv2.dilate(fore,fore,cv2.Mat()) 
     cv2.findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE) 
     cv2.drawContours(frame,contours,-1,cv2.Scalar(0,0,255),2) 
     cv2.imshow("Frame",frame) 
     cv2.imshow("Background",back) 
     if cv2.waitKey(1) & 0xFF == ord('q') 
      break 

cap.release() 
cv2.destroyAllWindows() 

if __name__ == "__main__": 
    run_main() 

答えて

0

あなたのコードは有効ではありませんPython、それはC + +とPythonの構文ミックスです。変更する必要があるかについて いくつかのヒント:

cv2.Mat frame 
cv2.Mat back 
cv2.Mat fore 
cv2.VideoCapture cap(0) 
cv2.BackgroundSubtractorMOG2 bg 

のOpenCVのPythonにはマットタイプはありません。データを処理するにはnumpy arraysを使用します。 また、Pythonの変数はこのように宣言されていません。

cap = cv2.VideoCapture() 

が正しい方法です。

バックグラウンド・トラクタを作成するために呼び出すメソッドは存在しません。

cv2.BackgroundSubtractorMOG2 bg 

bg = cv2.createBackgroundSubtractorMOG2() 

はまたthisチュートリアルを参照してくださいにする必要があります。

このライン

std::vector<std::vector<cv::Point> > contours; 

は単なるC++のです。

cap >> frame; 

これはデータを読み取るC++の方法です。 Pythonでする必要があります

frame = cap.read()