opencv2在MFC对话框控件中显示图片播放视频

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/m0_37901643/article/details/73565168

       利用opencv在MFC对话框相关控件上显示图片或者播放视频的方法很多,如使用opencv的CvvImage类,将Mat数据转换到CImage,使用MFC绘图函数等,但个人认为将opencv的显示窗口贴到MFC控件上,最为直接,最符合opencv玩家的编程习惯。

   这种方法在对话框上拖入Text Control 控件,添加变量名为:m_staticCamera1。在创建显示窗口时,添加如下代码:

namedWindow("IPCamera", 0);
CRect rect_CAM1;
m_staticCamera1.GetClientRect(&rect_CAM1);
int winWindth = rect_CAM1.Width();
int winHeight = rect_CAM1.Height();
resizeWindow("IPCamera", winWindth, winHeight);
HWND hWnd_CAM1 = (HWND)cvGetWindowHandle("IPCamera");
HWND hParent_CAM1 = ::GetParent(hWnd_CAM1);
::SetParent(hWnd_CAM1, GetDlgItem(IDC_STATIC_CAMERA1)->m_hWnd);
::ShowWindow(hParent_CAM1, SW_HIDE); //隐藏运行程序框
GetDlgItem(IDC_STATIC_CAMERA1)->ShowWindow(0);//创建时不显示播放控件

注:这种方法在打开窗口显示时会出现闪屏现象,为避免这种现象,需将窗口的创建放在对话框的初始化函数中,TrackerDlg为对话框类名,如下:

BOOL TrackerDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    // TODO: Add extra initialization here 
    //上面创建显示窗口代码粘贴处
}

显示时,添加代码:

imshow("IPCamera", Img);
GetDlgItem(IDC_STATIC_CAMERA1)->ShowWindow(1); //显示播放控件

关闭时,添加代码

GetDlgItem(IDC_STATIC_CAMERA1)->ShowWindow(0);
//GetDlgItem(IDC_STATIC_CAMERA1)->Invalidate();
destroyWindow("IPCamera");
版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/m0_37901643/article/details/73565168

猜你喜欢

转载自blog.csdn.net/u010440456/article/details/82752681