如何在mfc多文档中利用多线程打开usb摄像头,可以使用opencv函数库

Mr_Zhouzl 2016-12-16 12:04:58
可以使用c++11

void CImgProcDoc::OnCamopen()
{
// TODO: 在此添加命令处理程序代码
std::thread t1(OpenCam,this);
t1.detach();
//std::thread t2(CannyCam, this);
//t2.detach();
}


void OpenCam(LPVOID lpParam)
{
cv::VideoCapture cap(0);
cv::Mat frame;
while (cap.isOpened())
{
cap >> frame;
if (frame.empty())
break;
//cv::imshow("imgCanny", frame);
cv::waitKey(30);
}
}

第二部分怎么编写,要在文档视图中重绘,已经定义了Cvvimage m_image
...全文
1042 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
gx_999 2017-03-14
  • 打赏
  • 举报
回复
想问一下题主,你在子线程进行opencv的相关操作(调用opencv函数)实现了没?最近在做相关的东西,有些操作不放在子线程就是可以的,但一放到子线程就出错。网上搜了一下,很多说opencv的一些函数只能在主线程调用,不能在工作线程调用。。。
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
现在自定义结构体CamPara中的Cvvimage类m_image已经能正确赋值了,现在怎么绘制这个变量?
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复

现在m_image已经获得数据了,现在应该怎么重绘啊?
赵4老师 2016-12-21
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
向立天 2016-12-21
  • 打赏
  • 举报
回复
引用 14 楼 qq_21400315 的回复:
加上了一个结构体用this作为输入参数,不过出现冲突
不是this指针有问题
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
向立天 2016-12-21
  • 打赏
  • 举报
回复
引用 29 楼 qq_21400315 的回复:
我想把这个操作直接在线程中完成,就是在线程中直接重绘
工作线程中不应该进行界面操作 你这个想法从根本上就是错误的
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
全局变量的话应该需要互斥锁,能不能再picturebox那样使用?
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
我想把这个操作直接在线程中完成,就是在线程中直接重绘
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
线程必须是静态函数,所以无法使用类成员变量的
向立天 2016-12-21
  • 打赏
  • 举报
回复
引用 26 楼 qq_21400315 的回复:
最关键的是在线程中获得的Cvvimage怎么传到ondraw中去
我以为你在线程中获取的Cvvimage就是OnDraw所在的view类的成员变量,直接用就是了 如果现在不是那就把它声明在view类中在通过线程获取 或者通过全局变量过度 或者序列化之后写文件然后发消息给view读取这个文件 方法很多啊
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
最关键的是在线程中获得的Cvvimage怎么传到ondraw中去
Mr_Zhouzl 2016-12-21
  • 打赏
  • 举报
回复
mfc多文档只有ondraw没有onpaint
向立天 2016-12-21
  • 打赏
  • 举报
回复
引用 23 楼 qq_21400315 的回复:
现在自定义结构体CamPara中的Cvvimage类m_image已经能正确赋值了,现在怎么绘制这个变量?
和绘制相关的代码都要整理到OnPaint中 需要重绘的时候使绘制窗口调用Invalidate即可
赵4老师 2016-12-20
  • 打赏
  • 举报
回复
可以将临时文件放在RamDisk上提高效率减少磨损磁盘。
Mr_Zhouzl 2016-12-20
  • 打赏
  • 举报
回复
这样做的话会增加一个读写硬盘的操作
Mr_Zhouzl 2016-12-20
  • 打赏
  • 举报
回复
Mr_Zhouzl 2016-12-20
  • 打赏
  • 举报
回复

我加了这一句还是相同的问题。
Mr_Zhouzl 2016-12-19
  • 打赏
  • 举报
回复
加上了一个结构体用this作为输入参数,不过出现冲突
赵4老师 2016-12-19
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸! 无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
加载更多回复(13)
内容概要:本文围绕“非线性流量的数据驱动Koopman模型预测控制研究”展开,提出一种基于数据驱动的Koopman算子理论方法,用于构建非线性系统的线性化状态空间模型,并结合模型预测控制(MPC)实现对复杂非线性系统的高效控制。研究通过引入扩展动态模态分解(EDMD)等观测函数,将非线性动力学映射至高维特征空间,在该空间实现近似线性化表征,进而融合线性MPC框架进行优化求解。全文系统阐述了Koopman算子的数学基础、隐式线性化机制及在非线性流量控制的建模流程,并通过Matlab代码完成了算法实现与仿真实验,验证了该方法在处理无精确物理模型、强非线性、时变动态系统的有效性与鲁棒性,尤其适用于工业流程控制、能源系统调度等实际工程场景。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab编程,从事控制工程、系统辨识、智能优化、能源系统建模等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于难以建立精确数学模型的复杂非线性系统(如流体动力系统、电力电子系统、机器人动力学等)的建模与实时控制;②实现数据驱动下的模型预测控制,提升系统响应速度与控制精度;③为先进控制策略(如MPC)提供一种可行的线性化建模范式,推动现代控制理论与数据科学、机器学习的深度融合。; 阅读建议:建议读者结合提供的Matlab代码深入理解Koopman方法的具体实现过程,重点关注观测函数构造、核函数选择、矩阵逼近、降维处理及MPC控制器设计等关键技术环节,并尝试将其迁移至其他非线性系统进行复现实验与性能对比,以全面掌握其适用范围与局限性。
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧