如何获得使用OpenCV创建的窗口位置(x,y)?

时间:2015-03-26 15:12:26

标签: opencv

如何获得使用OpenCV创建的窗口位置(x,y)?

但是如何获得此窗口的当前位置坐标?

此外,还有函数void loadWindowParameters("my window");,可以写成:

  

加载大小,位置,标记,跟踪栏值,缩放和平移   窗口window_name的位置

但它是否将这些参数加载到?声明此函数不会返回任何内容 - 只获取窗口名称并返回void

1 个答案:

答案 0 :(得分:1)

the feature request完成此功能之前,如果您需要此功能而无法等待,则可以自行实施。你需要opencv源代码,然后你必须编辑一些opencv文件并重建opencv的一部分。 我按照 moveWindow()的源代码作为模型。

这就是我所做的:

添加到 opencv / sources / modules / highgui / source / window_w32.cpp 这个函数(我在 cvMoveWindow 定义下面添加了它):

CV_IMPL void cvGetWindowRect( const char* name, int &x, int &y, int &width, int &height)
{
    CV_FUNCNAME( "cvGetWindowRect" );

    __BEGIN__;

    CvWindow* window;
    RECT rect;

    if( !name )
        CV_ERROR( CV_StsNullPtr, "NULL name" );

    window = icvFindWindowByName(name);
    if(!window)
        EXIT;

    GetWindowRect( window->frame, &rect );
    x = rect.left;
    y = rect.top;
    width = rect.right - rect.left;
    height = rect.bottom - rect.top;

    __END__;
}

并在 opencv / sources / modules / highgui / include / opencv2 / highgui_c.h 中添加其声明:

CVAPI(void) cvGetWindowRect( const char* name, int &x, int &y, int &width, int &height);

仅此一项就可以使用C / C ++中的 cvGetWindowRect 来获取窗口rect。但是如果你想使用C ++接口或python接口(就像我一样),你可以更多地编辑两个文件:

添加到 opencv / sources / modules / highgui / source / window.cpp 此功能:

void cv::getWindowRect( const String& winname, CV_OUT int &x, CV_OUT int &y, CV_OUT int &width, CV_OUT int &height)
{    
    cvGetWindowRect(winname.c_str(), x, y, width, height);
}

并在 opencv / sources / modules / highgui / include / opencv2 / highgui.hpp 中添加其声明:

CV_EXPORTS_W void getWindowRect( const String& winname, CV_OUT int &x, CV_OUT int &y, CV_OUT int &width, CV_OUT int &height);

然后你将不得不重建 opencv_highgui 项目(我使用Visual Studio 2015为Windows做这个)。如果您需要python绑定,那么也要重建 opencv_python3 项目。在构建python绑定时,需要CV_EXPORTS_W和CV_OUT宏来公开函数并识别输出参数。从python你将获得一个4元组作为返回值, - >例如:

>>> cv2.getWindowRect("my window")
(1024, 0, 817, 639)

对于python绑定,您必须将新的 cv2.cp35-win_amd64.pyd opencv_highgui300.dll 复制到 PythonEnv \ Lib \ site -packages