这个项目中,我没有用opencv对摄像头进行采集,因为在编程过程中,发现opencv1.0可以方便的对免驱的网络摄像进行图像采集,而对于由directshow驱动的专业摄像头不能很好的支持,会出现一些莫明的错误,所以我们采用其它公司开发的一套视频显示控件来采集视频。
这里,我有一点心得,在公司做项目完全不同于学校里的科研,在这里,如果我们想要完成一个功能,如果有现成的东西,就完使用不要去自己开发,因为这里不是要培养你的个人能力,而是要为公司去创造价值,所以我在尝试opencv没有成功时(甚至都没有要我稍微用点时间查查资料。。),就对我说,还是用现成的ocx控件去做吧,这是题外话了。
在用ocx控件的过程,我发现,有些东西还是和通用控件不一样的。
1.加载控件方法
选择蓝色的部分:
仍然选择蓝的部分:
加载你需的控件,如果你用的是别人的控件,则可能需要注册。
2.使用控件
以下是实现视频的采集的代码,不加载这个控件是无法显示的
pForm=newCForm1;//所加载的控件的类
CWnd*hDC=GetDlgItem(IDC_FORM11);//控件的IDC
CRectrc(0,0,100,100); //视频预览窗口的大小
pForm->Create("类名称","窗口名称",WS_VISIBLE,rc,hDC,IDC_FORM11,NULL);
pForm->OpenVideo();//采集视频
其中Creat()这步很重要 ,里面要放一堆参数,前两个是字符串,WS_VISIBLE设置窗口属性,rc为窗口的大小,hDC为显示窗口的句柄,IDC_FORM11为窗口的IDC,当然如果你用的不是这个控件,可能creat里面的内容会有一些改变,那就多试试吧。。
做了以上的工作,我已经可以进行视频采集了,下一步是要进行抓图操作,抓图,我没有用控件内的函数,而是用了opencv中的函数,因为别人写的ocx控件不会把源代码给你,所以结合opencv时就必须有一个结合点。我用的这个结合点,就是将所抓图像保存在默认的文件夹中,然后再利用opencv来读取文件夹中的图像,算是间接的模式吧,不过能完成要求才是最重要的。