gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:26 24 4
gpt4 key购买 nike

我正在使用 pyopencv 绑定(bind)。这个 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 的实例类(class)。 C++ 函数修改其 keypoints范围。 Python 版本反而返回修改后的关键点。

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

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

关于c++ - 如何使用 boost::python (pyopencv) 在 python 中使用 C++ 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com