• 图像处理2打开多个摄像头




    使用双目视觉这里用到了opencv和directshow两个方面的内容,本次没有用到MFC。
    需要对编译器进行设置(opencv在图像处理方面很强大,但是在图像采集方面似乎只能采集一个摄像头,因此这里借用directshow进行双目图像的获取,之后就可以利用opencv进行处理)
    首先新建一个console应用程序,空工程,添加一个main.cpp
    一、与directshow有关的设置
    首先要去下载两个类CameraDS.h CameraDS.cpp,并要拷贝目录DirectShow,因为采集图像时会用到其中的函数。下载话在CSDN上找一个双目视觉的工程,里面一般都有。
    //////////////////////////////////////////////////////////////////////


    //   1. 将CameraDS.h CameraDS.cpp以及目录DirectShow复制到你的项目中
    //   2. 菜单 Project->Settings->Settings for:(All configurations)->C/C++->Category(Preprocessor)->Additional include directories
    //      设置为 DirectShow/Include
    //   3. 菜单 Project->Settings->Settings for:(All configurations)->Link->Category(Input)->Additional library directories
    //      设置为 DirectShow/Lib
    //////////////////////////////////////////////////////////////////////
    二、与opencv有关的设置
    1全局设置


    菜单Tools->Options->Directories:先设置lib路径,选择Library files,在下方填入路径:
    C:\Program Files\OpenCV\lib
    然后选择include files,在下方填入路径:
    C:\Program Files\OpenCV\cxcore\include
    C:\Program Files\OpenCV\cv\include
    C:\Program Files\OpenCV\cvaux\include
    C:\Program Files\OpenCV\ml\include
    C:\Program Files\OpenCV\otherlibs\highgui
    C:\Program Files\OpenCV\otherlibs\cvcam\include
    2
    然后选择source files,在下方填入路径:
    C:\Program Files\OpenCV\cv\src
    C:\Program Files\OpenCV\cxcore\src
    C:\Program Files\OpenCV\cvaux\src
    C:\Program Files\OpenCV\otherlibs\highgui
    C:\Program Files\OpenCV\otherlibs\cvcam\src\windows
    最后点击“ok”,完成设置。
    [编辑]
    项目设置
    3
    每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project->Settings,然后将Setting for选为All Configurations,然后选择右边的link标签,在Object/library modules附加上
    cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib




    注:其中opencv的1、2为一次性设置,及一旦一次设定后即记录在系统中,无需再次设置。3需要每次新建工程都要设置。




    三、摄像头型号:现代HYUNDAI 舞动系列 HYC-W300高清摄像头
    无驱 五玻 静态1000万像素


    下面是main.cpp源代码
    #include "camerads.h"
    #include <highgui.h>
    #include <stdio.h>
    
    
    int main()
    {
    
    
    int cam_count;
    cam_count = CCameraDS::CameraCount();//获取摄像头数目
    printf("There are %d cameras.\n", cam_count);//输出摄像头数目
    
    
    for(int i=0; i < cam_count; i++)            //获取所有摄像头名称并显示出来
    {
    char camera_name[1024];//声明1024个字符空间,1024字节
    int retval= CCameraDS::CameraName(i,camera_name,sizeof(camera_name) );
    //根据摄像头编号返回摄像头名字
    if(retval >0)
    printf("Camera #%d's Name is '%s'.\n", i, camera_name);
    else
    printf("Can not get Camera #%d's name.\n", i);
    }
    if(cam_count==0)//如果没有摄像头,返回-1
    return -1;
    
    
    CCameraDS camera0;//产生对象,打开第一个摄像头
    CCameraDS camera1;//产生对象,打开第二个摄像头
    //if(! camera.OpenCamera(0, true)) 
    //打开摄像头,指定摄像头0开始,参数2指示是否自动弹出摄像头属性页。
    if(! camera0.OpenCamera(2)) //false不弹出属性窗,用代码制定宽和高
    {
    fprintf(stderr, "Can not open camera 0.\n");//不成功,if(!0),执行代码
    return -1;
    }
    if(! camera1.OpenCamera(1)) 
    {
    fprintf(stderr, "Can not open camera 1.\n");//不成功,if(!0),执行代码
    return -1;
    }
    
    
    cvNamedWindow("camera1");//创建窗口1
    cvNamedWindow("camera2");//创建窗口2
    while(1)
    {
    //获取一帧
    IplImage *pFrame0 = camera0.QueryFrame();
    IplImage *pFrame1 = camera1.QueryFrame();
    //显示
    cvShowImage("camera1", pFrame0);
    cvShowImage("camera2", pFrame1);
    if (cvWaitKey(20) == 'q')//输入按键为q,break
    break;
    }
    
    
    camera0.CloseCamera();//可不调用此函数,CCameraDS析构时会自动关闭摄像头
    camera1.CloseCamera();//可不调用此函数,CCameraDS析构时会自动关闭摄像头
    cvDestroyWindow("camera1");
    cvDestroyWindow("camera2");
    return 0;
    }





  • 相关阅读:
    js难点之闭包理解
    rank() | dense_rank() | row_number() over(PARTITION BY sex order by age desc ) 的区别
    浏览器名称和版本判断
    Cookie与Session的初探
    ASP.NET基础系列
    ECharts使用
    java-保留x个小数位
    HttpServletResponse和HttpServletRequest
    java-socket通信
    java-序列化
  • 原文地址:https://www.cnblogs.com/libing64/p/2878757.html
Copyright © 2020-2023  润新知