多线程,借助Opencv在MFC的picture控件上不断刷新显示的问题

dugulieyang dugulieyang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
MFC显示图片是主线程,另开了一个线程采集图片放到一个全局变量(Mat类型)当中,MFC显示图片这个主线程将全局变量中的图片数据强制转化为IplImage 类,通过函数DrawPicToHDC显示到控件上。
图片数据转换及显示的代码如下:
IplImage depth_temp=IplImage(mDepth);
DrawPicToHDC(&depth_temp,IDC_PIC_DEPTH);

然后调用Invalidate(false);
不断在Onpaint函数中重绘达到连续显示图片成为连续画面的效果。

DrawPicToHDC函数如下:
void CPlatform_GameDlg::DrawPicToHDC(IplImage *img, UINT ID)
{
CDC *pDC=GetDlgItem(ID)->GetDC();
HDC hDC=pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
if(img->nChannels != 1)
{
cimg.CopyOf(img);
}
else
{
CvvImage img1;
img1.Create(img->width,img->height,8*3,img->origin);
cvConvertImage(img, img1.GetImage(), CV_GRAY2RGB);
cimg.CopyOf(img1, 0);
}
cimg.DrawToHDC(hDC,&rect);
ReleaseDC(pDC);
}

然后当开始运行的时候没问题,当程序运行时间稍长,不知道什么时候就出错误了,错误如下:


First-chance exception at 0x7538b760 in Platform_Game.exe: Microsoft C++ exception: cv::Exception at memory location 0x001ce188..
Unhandled exception at 0x7538b760 in Platform_Game.exe: Microsoft C++ exception: cv::Exception at memory location 0x001ce188..

求高人指点……?onpaint中直接调用invalidate(false);刷新界面貌似不太恰当,运行久了会出这个问题吗?
...全文

相关推荐

利用MFC的Picture控件显示图像和视频/摄像头画面(VS2008+OpenCV2.0)

利用MFC的Picture控件显示和处理图像,后面又添加了播放视频和捕获摄像头画面的功能,其中播放视频的功能只有 'Play' 和 'Stop',不能实现暂停

邹宇华

MFC与OpenCV混合编程:IplImage转DIB显示与配置全解

在Windows桌面应用开发中,MFC与OpenCV的整合是常见需求,MFC提供成熟的界面框架,OpenCV擅长图像算法,但两者的数据格式与渲染机制互不兼容。核心问题在于如何将OpenCV的IplImage或cv::Mat像素数据转换为MFC可绘制的DIB位图。通过自定义转换类,如Ipl2DIB和CBitmapEx,可实现图像在对话框Picture控件上的实时显示。技术价值在于避免引入第三方界面库,原生融合两种技术栈。该方案适用于工业相机取流、老项目升级及上位机开发。同时,对于控制台程序启用MFC、多线程处

Compass宁

MFC中集成OpenCV:从Mat到Picture Control的完整实践

在Windows桌面应用开发中,将图像处理与界面框架灵活结合是工程实践中的常见挑战。OpenCV提供了丰富的视觉算法,而MFC则是传统Windows应用的成熟界面框架。两者结合时,开发者往往面临消息循环冲突、像素格式差异以及跨线程取帧等基础问题。理解cv::Mat与Windows DIB的存储布局差异,利用StretchDIBits完成高效的图像绘制,并通过工作线程与PostMessage机制避免UI阻塞,是实现流畅相机预览、动态缩放和二维码识别等场景的关键技术路径。本文从环境配置出发,逐步解析像素转换、双

惚兮

vs2015+opencv3.3+mfc读取摄像头显示在图片控件Picture Control

在前辈的基础上做了一些改进,适用于vs2015+opencv3.3

ai_Lz

利用MFC鼠标消息响应事件实现在picture control控件上图像ROI区域选定与裁剪

利用vs2010MFC对话框的鼠标消息函数RBBUTTONDOWN,ONMOUSEMOVE,RBBUTONUP实现在picture control控件上选定图像的矩形ROI感兴趣区域,并裁剪显示出所选定的ROI区域。按住鼠标右键,拖动光标划定矩形区域,再弹起鼠标右键即完成一次ROI区域选定。

datou_SleepyzzZ
评论 3
收藏 已收藏
分享
返回顶部