opencv如何隐藏窗口

    今天处理视频的时候想将opencv中的窗口隐藏起来,以便进行多线程的处理。

    在opencv中可以通过cvGetWindowHandle获取窗口句柄。cvGetWindowHandle的返回值解释为:函数cvGetWindowHandle返回原始的窗口句柄(在Win32情况下返回HWND,GTK+情况下返回GtkWidget)。一开始的处理时,通过以下方法:

	cvNamedWindow("raw");
	HWND hWnd = (HWND)cvGetWindowHandle("raw"); 	
	ShowWindow(hWnd, 0);  //0的时候表示隐藏窗口

结果显示为:



从上面看,窗口显然没有隐藏起来。经过一番验证,原来hWnd指向的不是“raw”窗口的句柄。通过查看cvNameWindow代码,原来cvNameWindow创建窗口的时候会创建两个窗口,一个主窗口,一个子窗口。

代码如下:

CV_IMPL int cvNamedWindow( const char* name, int flags )
{
...... ......

    HWND hWnd, mainhWnd;
    CvWindow* window;
    DWORD defStyle = WS_VISIBLE | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU;
...... ......
 
    mainhWnd = CreateWindow( "Main HighGUI class", name, defStyle | WS_OVERLAPPED,
                             rect.x, rect.y, rect.width, rect.height, 0, 0, hg_hinstance, 0 );
    if( !mainhWnd )
        CV_ERROR( CV_StsError, "Frame window can not be created" );
    ShowWindow(mainhWnd, SW_SHOW);
 //YV- remove one border by changing the style
    hWnd = CreateWindow("HighGUI class", "", (defStyle & ~WS_SIZEBOX) | WS_CHILD, CW_USEDEFAULT, 0, rect.width, rect.height, mainhWnd, 0, hg_hinstance, 0);
    if( !hWnd )
        CV_ERROR( CV_StsError, "Frame window can not be created" );
    ShowWindow(hWnd, SW_SHOW);
 
...... ......
}

通过查看源代码,恍然大悟,于是将代码改成如下,即可。

	cvNamedWindow("raw");
	HWND hWnd = (HWND)cvGetWindowHandle("raw"); 
	HWND hRawWnd = ::GetParent(hWnd); //获得父窗口句柄
	ShowWindow(hWnd, 0);     //0:的时候表示隐藏子窗口
	ShowWindow(hRawWnd, 0);  //0:的时候表示隐藏父窗口

这样,opencv的窗口就不在显示了。 看来以后要多跟跟源代码,这样可以减少一些不必要的功夫。
  • 1
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

紫荆飘香V

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值