我试图在OpenCV中创建一个全屏窗口,并且OpenCV中提供的功能正常工作,除了左边界和上边界有白色边缘。花了一些时间研究OpenCV中的代码之后,我发现getWindowImageRect函数以某种方式返回的值比我编写的函数多出x,y和宽度和高度1px。
好的,这是问题。为什么两个函数返回不同的值?
这是我在OpenCV中找到的代码:
CvRect cvGetWindowRect_W32(const char* name)
{
CvRect result = cvRect(-1, -1, -1, -1);
CV_FUNCNAME( "cvGetWindowRect_W32" );
__BEGIN__;
CvWindow* window;
if (!name)
CV_ERROR( CV_StsNullPtr, "NULL name string" );
window = icvFindWindowByName( name );
if (!window)
EXIT; // keep silence here
RECT rect;
GetClientRect(window->hwnd, &rect);
{
POINT pt = {rect.left, rect.top};
ClientToScreen(window->hwnd, &pt);
result = cvRect(pt.x, pt.y, rect.right - rect.left, rect.bottom - rect.top);
}
__END__;
return result;
}
这是我用Python编写的代码,我认为这会给我相同的结果:
def getWindowRect(name)
hwnd = win32gui.FindWindow(None, name)
rect_l, rect_t, rect_r, rect_b = win32gui.GetClientRect(hwnd)
pt_x, pt_y = win32gui.ClientToScreen(hwnd, (rect_l, rect_t))
result = (pt_x, pt_y, rect_r - rect_l, rect_b - rect_t)
return result
使用以上两个函数的结果给我这样的输出:
(1, 1, 2559, 1439)
(0, 0, 2560, 1440)
所以我想知道是否有人可以告诉我为什么会这样吗?
请注意,该测试是在Windows 10下执行的。