Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集

最近正好要用个比较小的摄像头用来采集图像,就买了一个USB接口的工业内窥镜摄像头,发现用opencv打开摄像头出现imshow()显示的时候一闪而过。表示摄像头是打开了,但是采集不了。最后了解了一下,常用的USB摄像头和笔记本本身自带的摄像头不是一个类型的,imshow()获取不了这种类型的摄像头。

Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集_第1张图片

 

还有网上各种解决方法,基本都不正确,出现这种选择某种摄像头的方法,在真正使用中不实用而且基本都打不开摄像头。

采用DirectShow+OpenCV不仅可以打开摄像头,而且可以同时打开连接电脑的多个摄像头。这种方法更加简单。

 

配置环境:win10 VS2015+opencv2.4.4+DirectShow

一开始采用了opencv2.4.13发现打不开,出现winnt.h文件中的错误,一时解决不了,不指导更高版本的opencv是不是也出现这种问题,出现这种问题的可以降低一下自己的opencv版本试一试。

1.首先配置好opencv,方法看这个帖子opencv2.4.13配置方法,opencv2.4.4配置方法一致。

2.下载DirectShow,下载后解压,记住解压在哪里,里面有三个文件,bin,include和lib

3.配置:把bin文件的位置添加到电脑的环境中;在“VC++目录”的“包含目录”中添加D:\DirectShow\include;

在“VC++目录”的“库目录”中添加D:\DirectShow\lib;

4.把D:\DirectShow\include中的“CameraDS.h”和“Camera.cpp”复制到项目的当前目录下,并加载到项目的头文件和源文件中,如图:

Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集_第2张图片

 

 

4.添加主程序:

 

#include 
#include "camerads.h"
#include 
const char *g_szTitle  = "Camera";

int main()
{
	int m_iCamCount  = CCameraDS::CameraCount();
	printf("There are %d cameras.\n", m_iCamCount);

	if (m_iCamCount  == 0)
	{
		return (-1);
	}

	//CCameraDS m_CamDS0;
	CCameraDS m_CamDS1;

	IplImage *pFrame0  = NULL;
	IplImage *pFrame1  = NULL;
	IplImage *pFrame2  = NULL;

	//m_CamDS0.OpenCamera(0, false, 640, 480);
	m_CamDS1.OpenCamera(1, false, 640, 480);

	//cvNamedWindow("video0");
	cvNamedWindow("video1");

	while (1)
	{
		//获取一帧  
		//pFrame0  = m_CamDS0.QueryFrame();

		//显示  
		//cvShowImage("video0", pFrame0);

		//获取一帧  
		pFrame1  = m_CamDS1.QueryFrame();

		//显示  
		cvShowImage("video1", pFrame1);

		if (cvWaitKey(20) == 'q')
		{
			break;
		}
	}

	//m_CamDS0.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头  
	m_CamDS1.CloseCamera();
	//cvDestroyWindow("video0");
	cvDestroyWindow("video1");


	return 0;
}


 

 

 

 

 

 

 

你可能感兴趣的:(OpenCV)