OpenCV如何为具有不同参数的函数确定python绑定? OpenCV中,我们有两个C++函数,不同的参数 void cv::text::detectRegions ( InputArray image, const Ptr< ERFilter > & er_filter1, const Ptr< ERFilter > & er_filter2, std::vector< std::vector< Point > > & regions ) void cv::text::detectRegions ( InputArray image, const Ptr< ERFilter > & er_filter1, const Ptr< ERFilter > & er_filter2, std::vector< Rect > & groups_rects, int method = ERGROUPING_ORIENTATION_HORIZ, const String & filename = String(), float minProbability = (float) 0.5 ) < Python绑定如何决定执行哪个C++功能?< P>手动绑定,因此您需要检查OpenCV中的Python绑定代码,以知道使用哪个函数。

OpenCV如何为具有不同参数的函数确定python绑定? OpenCV中,我们有两个C++函数,不同的参数 void cv::text::detectRegions ( InputArray image, const Ptr< ERFilter > & er_filter1, const Ptr< ERFilter > & er_filter2, std::vector< std::vector< Point > > & regions ) void cv::text::detectRegions ( InputArray image, const Ptr< ERFilter > & er_filter1, const Ptr< ERFilter > & er_filter2, std::vector< Rect > & groups_rects, int method = ERGROUPING_ORIENTATION_HORIZ, const String & filename = String(), float minProbability = (float) 0.5 ) < Python绑定如何决定执行哪个C++功能?< P>手动绑定,因此您需要检查OpenCV中的Python绑定代码,以知道使用哪个函数。,c++,python-3.x,opencv,C++,Python 3.x,Opencv,以下是OpenCV在我的机器上为detectRegions函数创建的Python代码。Python函数签名是:cv2.text.detectRegions(image,er_filter1,er_filter2[,method[,filename[,minProbability]])->groups\u rects 如果仔细查看代码,您将看到根据您提供的参数数量和类型调用了两个不同版本的cv::text::detectRegions static PyObject* pyopencv_cv_te

以下是OpenCV在我的机器上为
detectRegions
函数创建的Python代码。Python函数签名是:
cv2.text.detectRegions(image,er_filter1,er_filter2[,method[,filename[,minProbability]])->groups\u rects

如果仔细查看代码,您将看到根据您提供的参数数量和类型调用了两个不同版本的
cv::text::detectRegions

static PyObject* pyopencv_cv_text_detectRegions(PyObject* , PyObject* args, PyObject* kw)
{
    using namespace cv::text;

    {
    PyObject* pyobj_image = NULL;
    Mat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_vector_Point regions;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, regions));
        return pyopencv_from(regions);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    UMat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_vector_Point regions;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, regions));
        return pyopencv_from(regions);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    Mat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_Rect groups_rects;
    int method=ERGROUPING_ORIENTATION_HORIZ;
    PyObject* pyobj_filename = NULL;
    String filename;
    float minProbability=(float)0.5;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", "method", "filename", "minProbability", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO|iOf:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2, &method, &pyobj_filename, &minProbability) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) &&
        pyopencv_to(pyobj_filename, filename, ArgInfo("filename", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, groups_rects, method, filename, minProbability));
        return pyopencv_from(groups_rects);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    UMat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_Rect groups_rects;
    int method=ERGROUPING_ORIENTATION_HORIZ;
    PyObject* pyobj_filename = NULL;
    String filename;
    float minProbability=(float)0.5;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", "method", "filename", "minProbability", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO|iOf:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2, &method, &pyobj_filename, &minProbability) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) &&
        pyopencv_to(pyobj_filename, filename, ArgInfo("filename", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, groups_rects, method, filename, minProbability));
        return pyopencv_from(groups_rects);
    }
    }

    return NULL;
}
静态PyObject*pyopencv\u cv\u text\u检测区域(PyObject*,PyObject*args,PyObject*kw)
{
使用名称空间cv::text;
{
PyObject*pyobj_image=NULL;
Mat图像;
PyObject*pyobj_er_filter1=NULL;
Ptr er_过滤器1;
PyObject*pyobj_er_filter2=NULL;
Ptr er_过滤器2;
矢量点区域;
const char*关键字[]={“image”,“er_filter1”,“er_filter2”,NULL};
if(PyArg_ParseTupleAndKeywords(args,kw,“OOO:detectRegions”,(char**)关键字,&pyobj_图像,&pyobj_er_过滤器1,&pyobj_er_过滤器2)&&
pyopencv_to(pyobj_图像,图像,ArgInfo(“图像”,0))&&
pyopencv_to(pyobj_er_filter1,er_filter1,ArgInfo(“er_filter1”,0))&&
pyopencv_to(pyobj_er_filter2,er_filter2,ArgInfo(“er_filter2”,0)))
{
ERRWRAP2(cv::text::detectRegions(图像、er_过滤器1、er_过滤器2、区域));
从(区域)返回pyopencv_;
}
}
PyErr_Clear();
{
PyObject*pyobj_image=NULL;
UMat图像;
PyObject*pyobj_er_filter1=NULL;
Ptr er_过滤器1;
PyObject*pyobj_er_filter2=NULL;
Ptr er_过滤器2;
矢量点区域;
const char*关键字[]={“image”,“er_filter1”,“er_filter2”,NULL};
if(PyArg_ParseTupleAndKeywords(args,kw,“OOO:detectRegions”,(char**)关键字,&pyobj_图像,&pyobj_er_过滤器1,&pyobj_er_过滤器2)&&
pyopencv_to(pyobj_图像,图像,ArgInfo(“图像”,0))&&
pyopencv_to(pyobj_er_filter1,er_filter1,ArgInfo(“er_filter1”,0))&&
pyopencv_to(pyobj_er_filter2,er_filter2,ArgInfo(“er_filter2”,0)))
{
ERRWRAP2(cv::text::detectRegions(图像、er_过滤器1、er_过滤器2、区域));
从(区域)返回pyopencv_;
}
}
PyErr_Clear();
{
PyObject*pyobj_image=NULL;
Mat图像;
PyObject*pyobj_er_filter1=NULL;
Ptr er_过滤器1;
PyObject*pyobj_er_filter2=NULL;
Ptr er_过滤器2;
向量组;
int method=ERGROUPING\u ORIENTATION\u HORIZ;
PyObject*pyobj_filename=NULL;
字符串文件名;
浮动概率=(浮动)0.5;
const char*关键字[]={“image”,“er_filter1”,“er_filter2”,“method”,“filename”,“minProbability”,NULL};
if(PyArg_ParseTupleAndKeywords(args,kw,“OOO|iOf:detectRegions”,(char**)关键字,&pyobj_图像,&pyobj_er_过滤器1,&pyobj_er_过滤器2,&method,&pyobj_文件名,&minProbability)&&
pyopencv_to(pyobj_图像,图像,ArgInfo(“图像”,0))&&
pyopencv_to(pyobj_er_filter1,er_filter1,ArgInfo(“er_filter1”,0))&&
pyopencv_to(pyobj_er_filter2,er_filter2,ArgInfo(“er_filter2”,0))&&
pyopencv_to(pyobj_文件名,文件名,ArgInfo(“文件名”,0)))
{
ERRWRAP2(cv::text::detectRegions(图像、er_过滤器1、er_过滤器2、组、方法、文件名、最小概率));
从(组矩形)返回pyopencv;
}
}
PyErr_Clear();
{
PyObject*pyobj_image=NULL;
UMat图像;
PyObject*pyobj_er_filter1=NULL;
Ptr er_过滤器1;
PyObject*pyobj_er_filter2=NULL;
Ptr er_过滤器2;
向量组;
int method=ERGROUPING\u ORIENTATION\u HORIZ;
PyObject*pyobj_filename=NULL;
字符串文件名;
浮动概率=(浮动)0.5;
const char*关键字[]={“image”,“er_filter1”,“er_filter2”,“method”,“filename”,“minProbability”,NULL};
if(PyArg_ParseTupleAndKeywords(args,kw,“OOO|iOf:detectRegions”,(char**)关键字,&pyobj_图像,&pyobj_er_过滤器1,&pyobj_er_过滤器2,&method,&pyobj_文件名,&minProbability)&&
pyopencv_to(pyobj_图像,图像,ArgInfo(“图像”,0))&&
pyopencv_to(pyobj_er_filter1,er_filter1,ArgInfo(“er_filter1”,0))&&
pyopencv_to(pyobj_er_filter2,er_filter2,ArgInfo(“er_filter2”,0))&&
pyopencv_to(pyobj_文件名,文件名,ArgInfo(“文件名”,0)))
{
ERRWRAP2(cv::text::detectRegions(图像、er_过滤器1、er_过滤器2、组、方法、文件名、最小概率));
从(组矩形)返回pyopencv;
}
}
返回NULL;
}

第二个函数自动完整函数签名如下:
cv2.text.detectRegions(image,er_filter1,er_filter2[,method[,filename[,minProbability]]]->groups\u rects
。两个函数仍然存在歧义。这两个函数的python定义相同。
static PyObject* pyopencv_cv_text_detectRegions(PyObject* , PyObject* args, PyObject* kw)
{
    using namespace cv::text;

    {
    PyObject* pyobj_image = NULL;
    Mat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_vector_Point regions;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, regions));
        return pyopencv_from(regions);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    UMat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_vector_Point regions;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, regions));
        return pyopencv_from(regions);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    Mat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_Rect groups_rects;
    int method=ERGROUPING_ORIENTATION_HORIZ;
    PyObject* pyobj_filename = NULL;
    String filename;
    float minProbability=(float)0.5;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", "method", "filename", "minProbability", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO|iOf:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2, &method, &pyobj_filename, &minProbability) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) &&
        pyopencv_to(pyobj_filename, filename, ArgInfo("filename", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, groups_rects, method, filename, minProbability));
        return pyopencv_from(groups_rects);
    }
    }
    PyErr_Clear();

    {
    PyObject* pyobj_image = NULL;
    UMat image;
    PyObject* pyobj_er_filter1 = NULL;
    Ptr<ERFilter> er_filter1;
    PyObject* pyobj_er_filter2 = NULL;
    Ptr<ERFilter> er_filter2;
    vector_Rect groups_rects;
    int method=ERGROUPING_ORIENTATION_HORIZ;
    PyObject* pyobj_filename = NULL;
    String filename;
    float minProbability=(float)0.5;

    const char* keywords[] = { "image", "er_filter1", "er_filter2", "method", "filename", "minProbability", NULL };
    if( PyArg_ParseTupleAndKeywords(args, kw, "OOO|iOf:detectRegions", (char**)keywords, &pyobj_image, &pyobj_er_filter1, &pyobj_er_filter2, &method, &pyobj_filename, &minProbability) &&
        pyopencv_to(pyobj_image, image, ArgInfo("image", 0)) &&
        pyopencv_to(pyobj_er_filter1, er_filter1, ArgInfo("er_filter1", 0)) &&
        pyopencv_to(pyobj_er_filter2, er_filter2, ArgInfo("er_filter2", 0)) &&
        pyopencv_to(pyobj_filename, filename, ArgInfo("filename", 0)) )
    {
        ERRWRAP2(cv::text::detectRegions(image, er_filter1, er_filter2, groups_rects, method, filename, minProbability));
        return pyopencv_from(groups_rects);
    }
    }

    return NULL;
}