繁体   English   中英

如何使用boost :: python(pyopencv)在python中使用C ++运算符

[英]How to use C++ operators within python using boost::python (pyopencv)

我正在使用pyopencv绑定。 这个python库使用boost :: python连接到OopenCV。 现在,我正在尝试使用SURF类,但是不知道如何在我的python代码中处理类运算符。

C ++类定义为:

void SURF::operator()(const Mat& img, const Mat& mask,
                  vector<KeyPoint>& keypoints) const
{...}

如何将我的论点传递给该班?

更新:感谢interjay,我可以调用该方法,但是现在出现类型错误。 python boost :: python :: tuple是什么?

import pyopencv as cv
img = cv.imread('myImage.jpg')

surf = cv.SURF();
key = []
mask = cv.Mat()
print surf(img, mask, key, False)

给我:

Traceback (most recent call last):
   File "client.py", line 18, in <module>
       print surf(img, mask, key, False)
       Boost.Python.ArgumentError: Python argument types in
       SURF.__call__(SURF, Mat, Mat, list, bool)
       did not match C++ signature:
            __call__(cv::SURF inst, cv::Mat img, cv::Mat mask,
                     boost::python::tuple keypoints,
                     bool useProvidedKeypoints=False)
            __call__(cv::SURF inst, cv::Mat img, cv::Mat mask)

您可以像调用它一样调用它。 如果surf_instSURF类的实例,则应调用:

newKeyPoints = surf_inst(img, mask, keypoints)

参数keypoints应该是一个元组,而imgmask应该是Mat类的实例。 C ++函数修改其keypoints参数。 相反,Python版本返回修改后的关键点。

C ++的operator()类似于Python的__call__ :它使对象可以使用与函数调用相同的语法进行调用。

编辑:对于第二个问题:正如您在错误中看到的那样, keypoints应该是一个元组,并且您给了它一个列表。 尝试使其成为一个元组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM