GDB pretty printer如何把一个裸的C++的python对象转换为python的另一种对象

16 views
Skip to first unread message

asmwarrior

unread,
Apr 26, 2013, 12:03:59 AM4/26/13
to Code::Blocks中国开发组, hell...@freelists.org
我有个调试GDB的疑问,具体内容以英文的形式发在这里:
http://stackoverflow.com/questions/16227166/gdb-cvmat-python-object-issue-when-debugging-a-c-program

现在的麻烦之处是:从GDB里面的python代码中得到的对象是一个裸的C++对象。比如打印这个对象,得到的内容是:

{flags = 1124024320, dims = 2, rows = 44, cols = 37, data = 0x3ef2d0 '\377' <repeats 200 times>..., refcount = 0x3ef92c, datastart = 0x3ef2d0 '\377' <repeats 200 times>..., dataend = 0x3ef92c "\001", datalimit = 0x3ef92c "\001", allocator = 0x0, size = {p = 0x22fe10}, step = {p = 0x22fe38, buf = {37, 1}}}

而python-opencv的里面使用的对象,是经过opencv的python自己包装过的,两者之间不太一样,不能直接拿来使用。不知道大家能否给点建议,谢谢。

OpenCV的源代码(参见:http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.4/OpenCV-2.4.4a.tar.bz2/download)中对cv::Mat对象的相关操作代码是:
static PyObject* pyopencv_from(const Mat& m)
{
if( !m.data )
Py_RETURN_NONE;
Mat temp, *p = (Mat*)&m;
if(!p->refcount || p->allocator != &g_numpyAllocator)
{
temp.allocator = &g_numpyAllocator;
m.copyTo(temp);
p = &temp;
}
p->addref();
return pyObjectFromRefcount(p->refcount);
}



Reply all
Reply to author
Forward
0 new messages