本文在博主知乎的地址:https://zhuanlan.zhihu.com/p/24156588
最近在做一个实验,需要将图像cv::Mat显示到MFC上,这个操作有点难度,百度还有google的解决办法都不是很满意,意外在一个开源软件(背景减除算法库BGSLibrary-A Background Subtraction Library )里面看到了相关操作,现分享出来,实现效果见图:
//初始化部分,主要功能好像就是把cv的窗口和MFC的窗口联系起来,具体不太懂,有谁知道的,可以解答下哈
cv::namedWindow("Display", 1);//命名一个窗口"Display"
HWND hWnd = (HWND)cvGetWindowHandle("Display");//获得这个窗口的句柄
HWND hParent = ::GetParent(hWnd);//貌似得到这个窗口的父句柄
::SetParent(hWnd, GetDlgItem(IDC_STATIC_ImgDisplay)->m_hWnd);//貌似给MFC图片控件设置和cv窗口"Display"一样的父句柄
::ShowWindow(hParent, SW_HIDE);//设置窗口的显示状态:隐藏窗口并激活其他窗口。不太懂
初始化算5行代码。
//显示部分
do
{
do something..//获取图片
cv::resize(,,)//更改图片尺寸以适应图片控件尺寸
cv::imshow("Display", cv::Mat x);//显示,直接通过cv函数显示到MFC上
cv::waitKey(20);
}while(bool x);
显示部分只能算1行有效代码,其他的代码只是为了演示,我没有骗人吧,嘎嘎,大家快来试一试。