2017-02-28 11 views
0

私はCythonを使ってPythonコードにC++ラッパーを作成しています。Unknown型のリファレンスとしてcython引数を渡す

import cv2 

cdef public void Load_Cascades(object& face_cascade, object& eye_cascade): 
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
    eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') 
    print("Cascades loaded!!") 

引数の型が不明であるので、私はobject&を使用している次の参照変数として渡す方法であるとして CDEF関数です。呼び出し関数は次のようになります。

cdef public void Run(): 
    face_cascade = None; 
    eye_cascade = None; 
    Load_Cascades(face_cascade, eye_cascade) 

このようなコードでは、参照変数を変更できないというcythonコンパイラのエラーがあります。

は、私はまた、あなたが私が私がcythonに参照を経由して、未知の型変数の受け渡しを実現する方法を教えてくださいすることができ、これは同様に動作しないアドレス

Load_Cascades(&face_cascade, &eye_cascade) 

を渡して関数を呼び出した

+1

のためにあなたのデビッドありがとうございました。 'object'は基本的に「これをPythonとして扱う」と言っています。変更したい変数を返します。 – DavidW

+0

[this](https://groups.google.com/forum/#!topic/cython-users/nXsytgkTbGg)が役立つ可能性があります – Matthias

答えて

1

objectは引数をデフォルトのPython引数にするので、Pythonの変更可能性が考慮されます。したがって、私はすべての引数をデフォルトで変更可能なlistにマージしました。

関数を呼び出している間ので、コードは今

import cv2 
cdef public void Load_Cascades(cascade): 
    cascade.append(cv2.CascadeClassifier('haarcascade_frontalface_default.xml')) 
    cascade.append(cv2.CascadeClassifier('haarcascade_eye.xml')) 
    print("Cascades loaded!!") 

で、私はちょうど空のリストを渡す

cdef public void Run(): 
    cascade = [] 
    Load_Cascades(cascade) 

はあなたがいない入力

関連する問題