OpenCV Python绑定脚本没有找到基类

时间:2015-06-05 06:24:41

标签: python opencv cmake

我目前正在为OpenCV 3.0创建一个模块,并尝试使其在Python中运行。我想我发现OpenCV如何创建Python绑定似乎有问题,但我不知道解决问题的最佳方法是什么。

我的问题如下: 我的模块文件夹中有2个类(modules/xvideo/include/opencv2/xvideo中的标题),它们是:parentClass.hppchildClass.hpp。当然ChildClass继承自ParentClass(名称仅用于示例)。但是脚本gen2.py(位于modules/python/src2)正试图在ChildClass之前创建ParentClass并最终出现错误:

Generator error: unable to resolve base xvideo_ParentClass for xvideo_ChildClass

这似乎是因为类是按照脚本srcfiles函数中变量gen给出的顺序生成的:

def gen(self, srcfiles, output_path):
    self.clear()
    self.parser = hdr_parser.CppHeaderParser()

    # step 1: scan the headers and build more descriptive maps of classes, consts, functions
    #print(srcfiles) ##matthieu
    for hdr in srcfiles:
        decls = self.parser.parse(hdr)
        if len(decls) == 0:
            #print(hdr + '0') ##matthieu
            continue
        #else: ##matthieu
            #print(hdr) ##matthieu
        self.code_include.write( '#include "{0}"\n'.format(hdr[hdr.rindex('opencv2/'):]) )
        for decl in decls:
            name = decl[0]
            if name.startswith("struct") or name.startswith("class"):
                # class/struct
                p = name.find(" ")
                stype = name[:p]
                name = name[p+1:].strip()
                self.add_class(stype, name, decl)
    ...

所以我上游找到了如何创建这个列表。看来,该列表是每个模块的子列表的串联,其中每个子列表由CMake文件cmake/OpenCVModule.cmake在第626行创建:

file(GLOB lib_hdrs
    "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/*.hpp"
    "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.hpp"
    "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.h"
)

但有人可能知道file(GLOB)有一个indeterministic behaviour。这就是为什么我的子类在该列表中的父类之前,并最终引发错误。

所以我要问的是,如果有人知道绕过这个问题的最佳方法吗? 有没有办法自己指定清单?或者我只是忘了写点什么?请赐教^^

0 个答案:

没有答案