例子工程源码下载
特别标注:
有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在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,到这里,基本的工程配置就完成了(如果还出现工程配置问题,自己找原因吧)。
下来就是上代码了。
这是本工程需要编写的全部源码(就是现在网上搜索经常会见到的那段,稍微修改而已)
// testVideoInput.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "videoInput.h" #include "highgui.h" #include "cv.h" #pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib") int _tmain(int argc, _TCHAR* argv[]) { int numDevices = 0; //设备ID号 videoInput video;//创建视频捕获对象 int width = 720; int height= 480; IplImage *pRgb=cvCreateImage(cvSize(width,height), IPL_DEPTH_8U, 3); video.setupDevice(numDevices);//配置设备 while(1) { if(video.isFrameNew(numDevices)) { video.getPixels(numDevices, (unsigned char *)pRgb->imageData, false, true);//获取一帧 //cvFlip(pRgb,NULL,1);//加上这句就水平翻转画面 char c=cvWaitKey(1); if(c==27) break;//按ESC退出 cvShowImage("video", pRgb); } } return 0; }
最后奉上运行结果图片:(可能运行的时候要等到时间长些,摄像头图像节目才会弹出,
停留在这个函数isFrameNew)
问我能不能提供原始工程代码?
往上翻,最前面那一行,看不见的,你电脑浏览器有问题,下载不了的,你网络有问题。其他的,就是你人品问题了。