分享

【视觉...

 行走在理想边缘 2021-08-16

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

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

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

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

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

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

  10. using namespace cv;
  11. using namespace std;

  12. //-----------------------------------【全局变量声明】-----------------------------------------
  13. //描述:声明全局变量
  14. //-----------------

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

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

  25. if( !cap.isOpened() )
  26. {
  27. cout << "不能初始化摄像头\n";
  28. }
  29. namedWindow( "CamShift Demo", 0 );
  30. Mat frame;
  31. bool paused = false;
  32. 方法1
  33. //for(;;)
  34. //{
  35. //if( !paused )
  36. //{
  37. //cap >> frame;
  38. //if( frame.empty() )
  39. //break;
  40. //}
  41. //imshow( "CamShift Demo", frame);
  42. //}

  43. ////方法2
  44. while(1)
  45. {
  46. if( !paused )
  47. {
  48. cap >> frame;
  49. if( frame.empty() )
  50. break;
  51. }
  52. imshow( "CamShift Demo", frame ); //显示当前帧
  53. waitKey(30); //延时30ms
  54. }
  55. return 0;
  56. }



方法二
  1. // Camera2.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <opencv2\opencv.hpp>
  5. using namespace cv;

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




方法三

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

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

  11. while (1)
  12. {
  13. Mat frame;
  14. capture >> frame;
  15. if (! frame.empty())
  16. {
  17. imshow("最终结果", frame);
  18. }
  19. else
  20. cout << "can not ";//最后一帧的处理
  21. waitKey(30);
  22. }
  23. return(0);
  24. }

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默认—摄像机,若若用笔记本相机)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多