opencv如何隐藏窗口-cvNameWindow创建窗口的时候会创建两个窗口,一个主窗口,一个子窗口。

本文详细解析了在使用OpenCV时如何正确隐藏窗口的问题。通过分析cvNamedWindow函数的内部实现,揭示了其创建主窗口和子窗口的机制。并提供了修改后的代码示例,以实现完全隐藏窗口的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://blog.youkuaiyun.com/ahuang1900/article/details/17386611

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

 

 
  1. cvNamedWindow("raw");

  2. HWND hWnd = (HWND)cvGetWindowHandle("raw");

  3. ShowWindow(hWnd, 0); //0的时候表示隐藏窗口


结果显示为:

 

 

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

代码如下:

 

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

  2. {

  3. ...... ......

  4.  
  5. HWND hWnd, mainhWnd;

  6. CvWindow* window;

  7. DWORD defStyle = WS_VISIBLE | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU;

  8. ...... ......

  9.  
  10. mainhWnd = CreateWindow( "Main HighGUI class", name, defStyle | WS_OVERLAPPED,

  11. rect.x, rect.y, rect.width, rect.height, 0, 0, hg_hinstance, 0 );

  12. if( !mainhWnd )

  13. CV_ERROR( CV_StsError, "Frame window can not be created" );

  14. ShowWindow(mainhWnd, SW_SHOW);

  15. //YV- remove one border by changing the style

  16. hWnd = CreateWindow("HighGUI class", "", (defStyle & ~WS_SIZEBOX) | WS_CHILD, CW_USEDEFAULT, 0, rect.width, rect.height, mainhWnd, 0, hg_hinstance, 0);

  17. if( !hWnd )

  18. CV_ERROR( CV_StsError, "Frame window can not be created" );

  19. ShowWindow(hWnd, SW_SHOW);

  20.  
  21. ...... ......

  22. }

 

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

 

 
  1. cvNamedWindow("raw");

  2. HWND hWnd = (HWND)cvGetWindowHandle("raw");

  3. HWND hRawWnd = ::GetParent(hWnd); //获得父窗口句柄

  4. ShowWindow(hWnd, 0); //0:的时候表示隐藏子窗口

  5. ShowWindow(hRawWnd, 0); //0:的时候表示隐藏父窗口

 

这样,opencv的窗口就不在显示了。看来以后要多跟跟源代码,这样可以减少一些不必要的功夫。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值