VideoInput库 + Opencv2.3.1 + 无线摄像头 + VC2010

271 篇文章 2 订阅
120 篇文章 3 订阅

作者:jasonque

转自:http://blog.csdn.net/jasonque/article/details/8026448


  例子工程源码下载


特别标注:

有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在CSDN博客上,可以到CSDN博客来阅读。


正题:

最近在做一个视觉软件,要用到无线摄像头(淘宝买的,出来的图像有点坑爹),


(图片也是淘宝截的)

还以为会像做普通USB摄像头一样好弄,没想到费了我将近一个星期时间。

无 线摄像头跟普通摄像头驱动不一样,所以视频流和解码方式也不相同,苦逼的我在这方面不擅长,但没办法,是爷们遇到困就得上。刚开始做VC6.0用 opencv1.0来做,普通摄像头使用上没问题,但无线摄像头就不行,查资料说opencv1.0读写功能采用VFW,不知道什么东东。但能确定用 VFW是无法打开无线摄像头的。后来发现DirectShow能打开,但DirectShow太TMD大和复杂了,不想整。又在网上查到了“于老师”(不 认识)的CCameraDS类,下载他的例子测试,能够检测出摄像头,但就是无法打开。娘亲的,搞得我头都大了。

重点来了,Theodore Watson编写的videoInput Library ,这个家伙太强大了。网上一些文章是这样介绍的:“新版的OpenCV(OpenCV2.0及以后版本)提供了第三方的VideoInput库,该库实现了基于DirectShow的视频捕获,使用方便、功能强大,速度也很快。可以自动在VFW和DirectShow间切换。”  据说QQ的摄像头取屏也是用它做的哦。又据说已经融入opencv2.3了。我安装了opencv2.3之后,搜索关键字“videoInput”,找到 几个不认识的文件,太欺负人了,求助强大的网络,搜了好几天,几个搜索工具都让我用烂了,无外乎转载再转载(类似此篇文章:《OpenCV使用VideoInput库从摄像头捕获视频》),没个工程例子,对于我这样的鸟人有个鸟用呀(天下鸟人还是大多数的)。

 

没办法,还是靠自己吧。去到下载了videoInput Library——videoInput0.1995。解压,发现里面有VS2005和VS2008的源码,再打开他编译好的“videoInput Release.exe”,惊喜呀,无线摄像头可以使用了。太强大了。

看看,多么和谐(图像大小和界面大小不和谐,程序里面可以修改)

 

太棒了,就决定用这个videoInput了。但怎么使用呀,看了他里面的源码,感觉脑子还转不过了,脑容量小没办法。

有没有简单点的方式呀,希望几行代码就能搞定。

网上对于videoInput的资料少得可怜。除了作者网站,其他都是在混文章字节,重复再重复无聊的玩意儿。

回过头来有浏览了一遍《OpenCV使用VideoInput库从摄像头捕获视频》,应该有点价值吧。

不管了,先把代码放到工程里溜一遍再说。

不溜不知道,一溜吓一跳,问题太多,老没法编译成功。但总结了一下,大部分百分之九十的问题都来自于工程属性配置(也就是用到的头文件或库没有配置到工程里面来)

 

整理了一下,这个工程主要用到了两个库:opencv2.3.1和videoInput。这两在官网都可以下载到(下载不到的话就别往下看了,浪费人生)。

PS:(我上传的列子工程里面已经佩戴videoInput库)

重点又来了。工程配置,这个是关键,配置不好,那神仙也没办法了。

我的opencv2.3.1默认安装在C盘

在工程属性里面加入Include头文件路径:

C:\Program Files\opencv2.3.1\build\include
C:\Program Files\opencv2.3.1\build\include\opencv
C:\Program Files\opencv2.3.1\build\include\opencv2
.\libs\videoInput


 

在Referencedirectories加入videoInput相关文件路径:(不要忘记斜杠前面的点)

.\libs\videoInput

.\requiredLibs

 

在LibraryDirectories加入库文件路径:

C:\Program Files\opencv2.3.1\build\x86\vc10\lib

.\requiredLibs

 

在Linker->Input->AdditionalDependencies添加库文件:

opencv_calib3d231d.lib
opencv_contrib231d.lib
opencv_core231d.lib
opencv_features2d231d.lib
opencv_flann231d.lib
opencv_gpu231d.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib
opencv_legacy231d.lib
opencv_ml231d.lib
opencv_objdetect231d.lib
opencv_ts231d.lib
opencv_video231d.lib

videoInput.lib


 

ok,到这里,基本的工程配置就完成了(如果还出现工程配置问题,自己找原因吧)。

 

下来就是上代码了。

 

这是本工程需要编写的全部源码(就是现在网上搜索经常会见到的那段,稍微修改而已)

  1. // testVideoInput.cpp : Defines the entry point for the console application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "videoInput.h"  
  6. #include "highgui.h"  
  7. #include "cv.h"  
  8.   
  9. #pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")  
  10.   
  11. int _tmain(int argc, _TCHAR* argv[])  
  12. {  
  13.     int numDevices = 0; //设备ID号  
  14.     videoInput video;//创建视频捕获对象  
  15.     int width = 720;  
  16.     int height= 480;  
  17.     IplImage *pRgb=cvCreateImage(cvSize(width,height), IPL_DEPTH_8U, 3);  
  18.     video.setupDevice(numDevices);//配置设备  
  19.     while(1)  
  20.     {  
  21.         if(video.isFrameNew(numDevices))  
  22.         {  
  23.             video.getPixels(numDevices, (unsigned char *)pRgb->imageData, falsetrue);//获取一帧  
  24.             //cvFlip(pRgb,NULL,1);//加上这句就水平翻转画面  
  25.             char c=cvWaitKey(1);  
  26.   
  27.             if(c==27) break;//按ESC退出  
  28.             cvShowImage("video", pRgb);  
  29.         }  
  30.     }  
  31.   
  32.     return 0;  
  33. }  


最后奉上运行结果图片:(可能运行的时候要等到时间长些,摄像头图像节目才会弹出,

  1. 停留在这个函数isFrameNew)  

 

 

问我能不能提供原始工程代码?

往上翻,最前面那一行,看不见的,你电脑浏览器有问题,下载不了的,你网络有问题。其他的,就是你人品问题了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值