【视觉-摄像机1】opencv 调用工业摄像机(USB接口和GigE接口)

  • Post author:
  • Post category:其他

【计算机视觉】opencv 调用工业摄像机(USB接口和GigE接口)

第一次在CSDN写博客,有不到之处请指教,欢迎交流评论留言

开发环境为win7+VS2010+opencv (主要是操作系统windows,Linux还没尝试)

1 代码 opencv直接打开USB和GIgE摄像机

1.1 三种代码形式不同原理相同

方法一
//---------------------------------【头文件、命名空间包含部分】----------------------------
//		描述:包含程序所使用的头文件和命名空间
//-------------------------------------------------------------------------------------------------
//#include "opencv2/video/tracking.hpp"
#include "StdAfx.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctype.h>

using namespace cv;
using namespace std;

//-----------------------------------【全局变量声明】-----------------------------------------
//		描述:声明全局变量
//-----------------

Mat image;
Rect selection;
//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main()
{

	VideoCapture cap;
	Rect trackWindow;
	cap.open(0);//0默认—摄像机,若用笔记本相机;1 --是USB有限,无USB就 网络,若用笔记本;-1选择多个相机界面

	if( !cap.isOpened() )
	{
		cout << "不能初始化摄像头\n";
	}
	namedWindow( "CamShift Demo", 0 );
	Mat frame;
	bool paused = false;
	方法1
	//for(;;)
	//{
	//	if( !paused )
	//	{
	//		cap >> frame;
	//		if( frame.empty() )
	//			break;
	//	}
	//	imshow( "CamShift Demo", frame);			
	//}

	//	//方法2
	while(1)  
	{  
		if( !paused )
		{
			cap >> frame;
			if( frame.empty() )
				break;
		}
		imshow( "CamShift Demo", frame );	 //显示当前帧
		waitKey(30);  //延时30ms
	}  
		return 0;
}
方法二
// Camera2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv2\opencv.hpp>  
using namespace cv;  

//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main( )  
{  
	//【1】从摄像头读入视频
	VideoCapture capture(1);
	//0默认—摄像机,若用笔记本相机;1 --是USB有限,无USB就 网络,若用笔记本;-1选择多个相机界面
	//【2】循环显示每一帧
	while(1)  
	{  
		Mat frame;  //定义一个Mat变量,用于存储每一帧的图像
		capture>>frame;  //读取当前帧
	   if( frame.empty() )
			continue;
		imshow("读取视频",frame);  //显示当前帧
		waitKey(30);  //延时30ms
	}  
	return 0;     
}  




方法三

// Camera3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <opencv2\opencv.hpp>  
using namespace cv;  
using namespace std;
int main( )  
{  
	VideoCapture capture(0);
	//0默认—摄像机,若用笔记本相机;1 --是USB有限,无USB就 网络,若用笔记本;-1选择多个相机界面

	while (1)
	{
		Mat frame;
		capture >> frame;
		if (! frame.empty())
		{
						imshow("最终结果", frame);
		}
		else
		cout << "can not ";//最后一帧的处理
		waitKey(30);
	}
	return(0);
}

PS VideoCapture capture(1);//1 —USB有限,无USB就 网络,若用笔记本;-1选择多个相机界面;0默认摄像机,若用笔记本相机)

其实0,1……的设备ID号看WIN7设备管理器图像设备,对应的搜引号,从0开始。


1.2 VideoCapture的参考文档介绍



2 常见摄像机工业说明

2.1根据摄像机接口分为USB接口和GigE接口。

 (PS1笔记本电脑认为是没有接口的,调用时看ID号,一般为0,)

2.2根据需要安装相关驱动分为带驱动和免驱动。

 (PS二次开发(opencv调用时)安装相关驱动参考SDK,其实在win7下设备管理器下能显示的一般能直接调用)

现在贴出博主主要用过的工业相机:



有表达不足,或错误之处还清指正。
(PS VideoCapture capture(1);//1 --是USB有限,无USB就 网络,若用笔记本;-1选择多个相机界面;0默认—摄像机,若若用笔记本相机)

版权声明:本文为KYJL888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。