2016-07-03 3 views
-2

Was ist los mit meinem Python-Code. Es sagt Syntaxfehler in Zeile 5 "Mat Frame", Zeile 13 "Std". Dieser Code stammt ursprünglich aus C++, ich habe ihn in Python konvertiert.Bewegungserkennung + Konturen (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() 

Antwort

0

Ihr Code ist keine gültige Python, es ist eine syntaktische Mischung zwischen C++ und Python. Einige Hinweise auf das, was geändert werden muss:

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

Es gibt keine Mat Typ in OpenCV Python. Es verwendet numpy arrays, um Daten zu verarbeiten. In Python werden Variablen auch nicht auf diese Weise deklariert.

cap = cv2.VideoCapture() 

ist der richtige Weg, es zu tun.

Die Methode, die Sie zum Erstellen des Hintergrundsubtraktors aufrufen möchten, existiert nicht.

cv2.BackgroundSubtractorMOG2 bg 

hat

bg = cv2.createBackgroundSubtractorMOG2() 

Auch this Tutorial zu sehen sein.

Diese Linie

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

ist einfach nur C++.

cap >> frame; 

Das ist die C++ - Methode zum Lesen von Daten. In Python sollten Sie

frame = cap.read() 
tun
Verwandte Themen