使用BOOST.python从C返回一个结构到Python
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用BOOST.python从C返回一个结构到Python,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2027字,纯文字阅读大概需要3分钟。
内容图文
![使用BOOST.python从C返回一个结构到Python](/upload/InfoBanner/zyjiaocheng/793/d9438f92ffbf43f4b5ff8e0489ceba92.jpg)
我编写了一个C方法,我需要将结构返回给Python.
我已经能够按照本link中描述的方法使用BOOST将OpenCV mat从Python发送到C.
现在我需要走另一条路;从C返回到Python,然后在Python中访问该结构.可以吗?
任何样本或参考链接都是好的.我在发布这个问题之前尝试过谷歌搜索,但我无法获得任何样本或解释链接.
解决方法:
你可以使用modules / python / src2 / cv2.cpp中的另一个函数:
PyObject* pyopencv_from(const cv::Mat& m)
{
if( !m.data )
Py_RETURN_NONE;
cv::Mat temp, *p = (cv::Mat*)&m;
if(!p->refcount || p->allocator != &g_numpyAllocator)
{
temp.allocator = &g_numpyAllocator;
m.copyTo(temp);
p = &temp;
}
p->addref();
return pyObjectFromRefcount(p->refcount);
}
然后Boost Python包装器将如下所示:
boost::python::object toPython( const cv::Mat &frame )
{
PyObject* pyObjFrame = pyopencv_from( frame );
boost::python::object boostPyObjFrame(boost::python::handle<>((PyObject*)pyObjFrame));
return boostPyObjFrame;
}
请查看此链接:https://wiki.python.org/moin/boost.python/handle以确保使用适当的boost :: python :: handle<>适用于您的情况.
如果你需要不需要返回一个cv :: Mat但是你可以考虑使用不同的数据来使用boost :: python :: list或boost :: python :: dict.例如,如果要将2D点的向量返回到Python,可以执行以下操作:
boost::python::dict toPython( std::vector<cv::Point> newPoints, std::vector<cv::Point> oldPoints )
{
boost::python::dict pointsDict;
boost::python::list oldPointsList;
boost::python::list newPointsList;
for( size_t ii = 0; ii < oldPoints.size( ); ++ii )
{
oldPointsList.append( boost::python::make_tuple( oldPoints[ii].x, oldPoints[ii].y ) );
}
for( size_t ii = 0; ii < newPoints.size( ); ++ii )
{
newPointsList.append( boost::python::make_tuple( newPoints[ii].x, newPoints[ii].y ) );
}
pointsDict["oldPoints"] = oldPointsList;
pointsDict["newPoints"] = newPointsList;
return pointsDict
}
最后是Boost Python包装器:
BOOST_PYTHON_MODULE( myWrapper )
{
// necessary only if array (cv::Mat) is returned
import_array();
boost::python::converter::registry::insert( &extract_pyarray, type_id<PyArrayObject>());
def toPython("toPython", &toPython);
}
我没有测试过这个具体的解决方案,但原则上应该可行.
内容总结
以上是互联网集市为您收集整理的使用BOOST.python从C返回一个结构到Python全部内容,希望文章能够帮你解决使用BOOST.python从C返回一个结构到Python所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。