织梦CMS - 轻松建站从此开始!

罗索

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

落鹤生 发布于 2012-02-07 11:36 点击:次 
在vc6.0+opencv1.0环境下实现。虽然现在opencv出2.0了,但是不再支持vc6.0了,做这个例子当是跟vc6.0告个别了。呵呵。详细内容,往后会写上去的。中间遇到不少问题,都被我一一解决了。呵呵
TAG:

效果图如上所示,在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 *)'

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

(oskycar)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201202/15664.html]
本文出处:cnblogs.com/oskycar 作者:oskycar 原文
顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容