我正在使用Cython创建cthon包装到python代码。 cdef函数如下
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 public void Run():
face_cascade = None;
eye_cascade = None;
Load_Cascades(face_cascade, eye_cascade)
使用这样的代码,cython编译器会出错,无法更改引用变量。
我也通过传递地址
来调用该函数Load_Cascades(&face_cascade, &eye_cascade)
这不行也可以,请你告诉我如何在cython中通过引用实现未知类型变量的传递
答案 0 :(得分: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)
感谢大卫的输入