现在的位置: 首页 > 综合 > 正文

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

2017年06月16日 ⁄ 综合 ⁄ 共 2960字 ⁄ 字号 评论关闭

  例子工程源码下载

特别标注:

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

 

 

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

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

 

 

抱歉!评论已关闭.