我遇到了一个问题,试图公开动态C++库函数,链接到OpenCV,并使用OpenCV的强> Mat <强>数据类型,使用Python 2.7,使用NoMPy <强> NDARLY < /强>。在
我提出了一个类似于lightalchemist's solution here的解决方案,还尝试过使用boost::python和boost::numpy(也链接到python2.7)described in this SO question.
现在我还是坚持前者。我已经到了可以在iPython中加载模块的地步了,我看到了一个我正试图使用inspect模块移植的函数,我甚至可以调用它,甚至可以执行它。但是,当我试图使用numpyLocator(see lightalchemist's solution)类将Mat对象转换回ndarray时,这个问题会特别出现。 首先,当我试图从一个外部C++执行文件中调用<强> PyopCopvIn,并且它使用NUMPyApLoalApter作为编码时,它在
中出现了分段错误。PyEnsureGIL gil;
,每次都没有留言。Lightalchemist的解决方案并没有在pyopencv_-to中使用它(编辑:如果传入的ndarray已经被分配),而且它似乎可以工作。但是,官方的OpenCV cv2.cpp也使用了分配器,所以如果我尝试使用它,函数甚至不能将输入ndarray转换为Mat。在
当我尝试使用iPython中的模块时,它看到了函数。同样,它正确地执行它(将进程打印到控制台),但是当它从到达pyopencv_时,它会分离错误并杀死iPython shell。在
编辑:我使用的exacty与lightalchemist使用的源代码相同,只是我公开了一个函数,与官方OpenCV端口一样:
^{pr2}$有人知道如何解决这个转换问题吗?在
问题不是
声明。如果我试图使用外部C++函数,那就不起作用了。当我试图将两个输出值打包成一个时,问题实际上发生了:
^{pr2}$临时工作只是使用以下语句:
编辑: 对不起,我又搞砸了。Py_BuildValue工作正常。刚刚又测试了一下我的功能,一切正常。我一定是忘了上次测试return关键字了,所以它给了我“error return without exception set”
以下是完整的函数代码(我希望它对任何将OpenCV移植到python的人都有用)
更新:
这里是我使用OpenCV的Mat类编写的公开C++代码的github repo,尽可能少的疼痛。这是用于OpenCV 3.X的。在
对于opencv2.X,您可以使用Yati Sagade的this code/示例。如果您想公开使用opencv Mat类的函数,而不必担心显式转换,那么很容易将我代码中的Booost转换器与Yati代码中的转换函数相适应。在
相关问题 更多 >
编程相关推荐