使用未知类型

时间:2017-02-28 12:37:04

标签: python cython

我正在使用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中通过引用实现未知类型变量的传递

1 个答案:

答案 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)

感谢大卫的输入