如何获得使用OpenCV创建的窗口位置(x,y)?
namedWindow("my window");
moveWindow("my window", x, y);
但是如何获得此窗口的当前位置坐标?
此外,还有函数void loadWindowParameters("my window");
,可以写成:
加载大小,位置,标记,跟踪栏值,缩放和平移 窗口window_name的位置
但它是否将这些参数加载到?声明此函数不会返回任何内容 - 只获取窗口名称并返回void
。
答案 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 强>