MFC中利用多线程实现opencv视频窗口多画面

 

效果图如上所示,在vc6.0+opencv1.0环境下实现。虽然现在opencv出2.0了,但是不再支持vc6.0了,做这个例子当是跟vc6.0告个别了。呵呵

详细内容,往后会写上去的。中间遇到不少问题,都被我一一解决了。呵呵

介绍之前,我们需要澄清一些问题:

1、在控制台下能否实现多画面?

     答案是肯定的,通常采用内存贴图就可以实现的。只要把要显示位置的坐标计算正确,就可以了,并且也可以采用多线程来加快显示和处理速度。

2、那为什么还要在mfc下实现呢?

     在mfc下实现主要是考虑到mfc的强大、方便性,如果想做大型的程序,利用一个强大的靠山何乐而不为呢。况且opencv中对ui界面的支持相当有限,想实现更复杂的功能就比较麻烦。

3、为什么要采用多线程?

     摄像头的采集程序部分相当于是一个死循环,况且要实现多画面,如果写到一个进程里面..嘿嘿,如果卡不死那你一定是外星人了。

闲话少说,首先要介绍下线程创建的一般方法:

伪代码如下:

dword winapi fun1(lpvod lp);线程函数声明

main()

{

HANDLE hthread;定义线程句柄

hthread=createthread(-----);创建线程

closehandle(hthread);关闭句柄

}

dword winapi fun1(lpvod lp)

{要操作的内容}

 

很简单吧,多个线程照葫芦画瓢多定义几个就ok了;(线程同步就不讲了)

那有人可能就问了,既然如此直接在mfc里面定义几个这样的线程不就ok了么,答案是肯定也是否定的。因为mfc是以类为基础的,而对于线程函数来说,线程的调用是不需要依赖于某个类或某个对象的,但是如果不定义到类里面,我们的线程就无法使用类内部的资源,而单纯的定义到类内部的结果就是,编译器会报告如下 错误:

cannot convert parameter 3 from 'unsigned long(void *)' to 'unsigned long(_stdcall*)(void *)'

产生错误的原因就在于我们将线程定义到类的内部,但调用时我们却找不到这个对象

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值