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

    xiaoxiao2021-03-25  97

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

    第一次在写博客,有不到之处请指教,欢迎交流评论留言 开发环境为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默认—摄像机,若若用笔记本相机)
    转载请注明原文地址: https://ju.6miu.com/read-16798.html

    最新回复(0)