python - 如何看待导入的 OpenCV 代码? (特别是 python 的 cv2)

标签 python opencv

我和一个 friend 正在使用 OpenCV 进行一些图像处理工作,并且想打开 python 库中 findContours 方法的“黑匣子”,因为文档提供的内容不多于 function definition/parameters。 .我们已经阅读了寻找轮廓背后的数学知识,但有兴趣查看为此任务编写的特定 OpenCV 代码。

我们尝试过的事情:

我们查看了 opencv github repository但似乎我们可以访问的唯一函数/方法是在 c++ 中,我们不确定 opencv 如何制作它的 python 包装器。

我们也尝试过在 python shell 中导入 cv2 并打印源代码的位置,但不知道从哪里开始使用 .so 文件,该目录中的其他内容也没有帮助...

>>> import cv2
>>> print cv2
<module 'cv2' from '/usr/local/lib/python2.7/dist-packages/cv2.so'>

任何指向其他响应的链接(这实际上应该是关于 c++ 和 python 包装器的问题,或者是否有更简单的方法来打印 cv2 模块中的 findContours 代码,或者......?)或关于什么的提示下一步将不胜感激。谢谢!

最佳答案

>>> import cv2
>>> help(cv2.findContours)
Help on built-in function findContours in module cv2:

findContours(...)
    findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

正如您已经猜到的那样,c++ -> python 包装代码是从 c++ header 生成的,请查看 modules/python/src/gen2.py。

生成的代码,例如findContours 看起来像这样 (pyopencv_generated_funcs.h):

static PyObject* pyopencv_findContours(PyObject* , PyObject* args, PyObject* kw)
{
    PyObject* pyobj_image = NULL;
    Mat image;
    PyObject* pyobj_contours = NULL;
    vector_Mat contours;
    PyObject* pyobj_hierarchy = NULL;
    Mat hierarchy;
    int mode=0;
    int method=0;
    PyObject* pyobj_offset = NULL;
    Point offset;

    const char* keywords[] = { "image", "mode", "method", "contours", "hierarchy", "offset", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "Oii|OOO:findContours", (char**)keywords, &pyobj_image, &mode, &method, &pyobj_contours, &pyobj_hierarchy, &pyobj_offset) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 1)) &&
        pyopencv_to(pyobj_contours, contours, ArgInfo("contours", 1)) &&
        pyopencv_to(pyobj_hierarchy, hierarchy, ArgInfo("hierarchy", 1)) &&
        pyopencv_to(pyobj_offset, offset, ArgInfo("offset", 0)) )
    {
        ERRWRAP2( cv::findContours(image, contours, hierarchy, mode, method, offset));
        return Py_BuildValue("(NN)", pyopencv_from(contours), pyopencv_from(hierarchy));
    }

    return NULL;
}

关于python - 如何看待导入的 OpenCV 代码? (特别是 python 的 cv2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191062/

相关文章:

visual-studio-2010 - 如何在 Opencv 中使用 Cv Rect 裁剪图像。

python - 有人成功地使用 Pyinstaller 将数据文件捆绑到一个文件中吗?

python - 使用 python 评估滤波器 matlab 函数

python - 如何在python中左连接2个数据帧,如果过滤后第二个数据帧中有多个匹配行,则与第一行连接

python - 如何在 Django 模板中设置动态默认文本区域数据?

c# - C# 窗口中的 C++ opencv 应用程序

python - 在 pandas 中格式化包含两行的表格

image - 如何从图像中删除所有线条? (水平、垂直、对角线)

iphone - iPhone照片微笑操作应用程序

opencv - Code Composer(CCStudio)中的OpenCV代码