接手的项目又用到了IDS的网口相机,需要进行双相机的出图,以及后续的视觉算法开发。以下将介绍利用IDS网口相机,在VS2013 win32控制台模式下进行相机的出图和测试(依旧使用OpenCV+ImageWatch测试效果)。

首先,需要安装IDS的软件包(开发者模式),可以在官网下载对应的开发包(https://en.ids-imaging.com/download-ueye-win32.html),特别注意软件版本要与电脑匹配!

然后,利用软件自带的IDS Camera Manager进行网口相机IP配置,电脑的IP与相机的IP的前三个字段要相同。设置成功后效果如下:

其次,需要在VS中配置IDS环境,进行二次开发。在VS中配置IDS的运行环境非常简单,主要是以下几步:

1.在新建好的工程的 “C/C++” 附件包含目录中添加 ...\IDS\uEye\Develop\include;(注意,省略号前为安装IDS软件的绝对路径地址,我的全称为 D:\Program Files\IDS\uEye\Develop\include);

2.在 “链接器” 附加库目录中添加 ...\IDS\uEye\Develop\Lib; (省略号内容同上);

3.在 “链接器” 附加依赖项中添加 uEye_api.lib;

4.在工程头文件中包含 #include <uye.h> 即可。

以下是利用单相机进行简单出图测试的简洁代码:

----------------------------------

#include <iostream>
#include <opencv2/opencv.hpp>
#include <ueye.h>

struct Camera
{
    HIDS        hCam;
    char*        pImageMem;
    int            nImageID;
    int            RenderMode;
    SENSORINFO    SensorInfo;
    CAMINFO        CamInfo;
    int         nBitsPerPixel;
    bool        bLive;
    bool        bOpened;
};

/*
借鉴IDS自带的SDK开发包进行相机出图

时间:2018/07/18
*/
int main()
{
    HIDS hCam = 0;
    SENSORINFO stSensorInfo;
    CAMINFO stCamInfo;
    
    int flag = 0,memId=0;
    flag = is_InitCamera(&hCam, NULL);
    if (flag == 0)
    {
        is_GetSensorInfo(hCam, &stSensorInfo);
        is_GetCameraInfo(hCam, &stCamInfo);
        is_SetColorMode(hCam, IS_CM_SENSOR_RAW8);
        char *imgMem;
        imgMem = (char*)malloc(stSensorInfo.nMaxHeight*stSensorInfo.nMaxWidth*sizeof(char));
        memset(imgMem, 0, stSensorInfo.nMaxHeight*stSensorInfo.nMaxWidth*sizeof(char));
        is_AllocImageMem(hCam, stSensorInfo.nMaxWidth, stSensorInfo.nMaxHeight, 8, &imgMem, &memId);
        is_SetImageMem(hCam, imgMem, memId);
        is_CaptureVideo(hCam, IS_WAIT);

is_StopLiveVideo(hCam,IS_WAIT);//2018/08/07 添加内容
#if 1 //测试buffer
        cv::Mat img = cv::Mat((int)stSensorInfo.nMaxHeight, (int)stSensorInfo.nMaxWidth, CV_8UC1);
        for (int i = 0; i < (int)stSensorInfo.nMaxHeight; i++)
        {
            for (int j = 0; j < (int)stSensorInfo.nMaxWidth; j++)
            {
                img.at<uchar>(i, j) = imgMem[i*(int)stSensorInfo.nMaxWidth + j];
            }
        }
#endif

is_FreeImageMem ( hCam, imgMem, memId );

is_ExitCamera(hCam);
    }
    else
    {
        std::cout << "相机初始化失败!" << std::endl;
        std::cin.get();
        return 0;
    }
    std::cin.get();
    return 0;
}

----------------------------------

后续再进行相机属性控制,以及双相机的二次开发。

----------------------------------

2018/08/07 更新说明:

在代码中添加了停止视频帧函数,便于在进行连续抓图时,不会出现丢帧的情况!

连续抓图的代码如下:

---------------------------------

#include <iostream>
#include <opencv2/opencv.hpp>
#include <ueye.h>

struct Camera
{
    HIDS        hCam;
    char*        pImageMem;
    int            nImageID;
    int            RenderMode;
    SENSORINFO    SensorInfo;
    CAMINFO        CamInfo;
    int         nBitsPerPixel;
    bool        bLive;
    bool        bOpened;
};

/*
借鉴IDS自带的SDK开发包进行相机出图
2018/08/06    增加循环测试

时间:2018/08/06
*/
int main()
{
    HIDS hCam = 0;
    SENSORINFO stSensorInfo;
    CAMINFO stCamInfo;
    
    int flag = 0,memId=0;
    flag = is_InitCamera(&hCam, NULL);
    int n = 80;//连续抓80帧
    while (n-- > 0)
    {
        if (flag == 0)
        {
            is_GetSensorInfo(hCam, &stSensorInfo);
            is_GetCameraInfo(hCam, &stCamInfo);
            is_SetColorMode(hCam, IS_CM_SENSOR_RAW8);
            char *imgMem;
            imgMem = (char*)malloc(stSensorInfo.nMaxHeight*stSensorInfo.nMaxWidth*sizeof(char));
            memset(imgMem, 0, stSensorInfo.nMaxHeight*stSensorInfo.nMaxWidth*sizeof(char));
            is_AllocImageMem(hCam, stSensorInfo.nMaxWidth, stSensorInfo.nMaxHeight, 8, &imgMem, &memId);
            is_SetImageMem(hCam, imgMem, memId);
            is_CaptureVideo(hCam, IS_WAIT);
            is_StopLiveVideo(hCam, IS_WAIT);
#if 1 //测试buffer
            //Sleep(800);
            cv::Mat img = cv::Mat((int)stSensorInfo.nMaxHeight, (int)stSensorInfo.nMaxWidth, CV_8UC1);
            for (int i = 0; i < (int)stSensorInfo.nMaxHeight; i++)
            {
                for (int j = 0; j < (int)stSensorInfo.nMaxWidth; j++)
                {
                    img.at<uchar>(i, j) = imgMem[i*(int)stSensorInfo.nMaxWidth + j];
                }
            }
#endif
            
            cv::imwrite("F:\\1.bmp", img);

is_FreeImageMem ( hCam, imgMem, memId );//释放内存 20180820添加
        }
        else
        {
            std::cout << "相机初始化失败!" << std::endl;
            std::cin.get();
            return 0;
        }
    }
    is_ExitCamera(hCam);

std::cin.get();
    return 0;
}

---------------------------------

IDS相机SDK二次开发相关推荐

  1. C/C++实战——基于Qt框架和visual studio的海康相机SDK二次开发

    最近在进行机器视觉系统的搭建,积累了经验,想和大家讨论.互相学习.相机是图像的来源.为了搭建视觉系统,完成图像分析.机器视觉任务,需要编程控制相机按工作所需的曝光.增益和帧率同步采集和存储图像.工业相 ...

  2. 海康相机-SDK二次开发(NVR)-多相机IPCamera连接采集-opencv图像格式转换

    主要功能: 海康SDK开发,通过连接NVR,实现连接NVR的2个相机同时采集(多线程),并进行opencv图像格式转换. 关键技术点: 1.回调函数 2.YV12->oepncv图像格式转换 3 ...

  3. 海康相机SDK二次开发的一些报错和解决办法

    1.MV_OK 0x00000000 成功,无错误 解析:-2147483648/0x80000000正常状态返回,执行成功 2.MV_E_HANDLE 0x80000000 错误或无效的句 解析:- ...

  4. 大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能

    1.打开VS, 这里安装的是VS2019, 新建winform窗体. 2.打开水星驱动安装目录下的例程作为参考. 水星驱动安装包可以在大恒图像官网下载最新版本, 安装目录不要有中文路径, 安装之前把杀 ...

  5. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)

    最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...

  6. 海康威视SDK二次开发通过云台参数设置控制摄像机的位置

    海康威视SDK二次开发通过云台参数设置控制摄像机的位置 由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件, ...

  7. Linux下海康威视工业相机的SDK二次开发

    1.客户端软件MVS的安装 1.1安装包的下载和解压 去 官网 下载两个软件安装,分别是客户端和开发环境.(这里我们下载V2.1.1(Linux)和Runtime组件包(Linux)): 工业相机文档 ...

  8. 海康威视工业相机SDK二次开发

    海康威视工业相机SDK二次开发 好气,第一次写文章,结果没不小心保存关掉,什么都没了. 本人是一名在读研究生,被导师分配了做项目中海康工业相机的二次开发.实现的需求是:实现八个相机同时打开视频,并且分 ...

  9. 海康Camera MVS Linux SDK二次开发封装ROS packge过程记录(c++)

    Livox Lidar  + HIKROBOT Camera系列 最近在开发相机和激光雷达融合的slam算法,主要用于三维重建,想实时的得到彩色点云地图,传感器选择了海康威视的工业相机和大疆的固态激光 ...

最新文章

  1. NoSQL数据库四大分类
  2. [图]为C# Windows服务添加安装程序
  3. 基于MINA框架快速开发网络应用程序
  4. java 多个监听_java中监听一个客户端怎么做?监听多个怎么做?
  5. 那些原生JavaScript
  6. git add 所有修改文件_Git管理修改、撤销和删除文件
  7. continue语句只用于循环语句中_Java之循环语句、条件判断语句(三目运算符)、break、continue...
  8. 用winformz时间格式不正确_煮八爪鱼,有人用冷水,有人用开水,大厨:都不对,教你正确做法...
  9. 关于jacob支持BSTR类型的经验总结
  10. CSU 2151 集训难度(线段树)
  11. 《Clojure程序设计》——导读
  12. R语言和Python交互
  13. python re sub用法_python re模块常见使用方法整理
  14. 2022全球「高被引科学家」榜单出炉!中国内地1169人入选,继续紧追美国
  15. 杀死一只知更鸟 摘抄
  16. Word 中,字体无法调整的解决方法
  17. 一行 Python 能实现什么丧心病狂的功能?
  18. 怎么把线稿提取出来_99%的人不知道!教你怎么提取绘画作品的线稿!
  19. win7计算机无法连接投影仪,笔记本win7系统连接投影仪显示没信号如何解决?
  20. 在matlab中建模基准地形和山峰

热门文章

  1. SetBkMode(TRANSPARENT) 设置透明窗口
  2. SVM推导过程解读笔记
  3. MySQL-基础-DDL语句(一)-数据库的操作
  4. php redirect导致重复请求,微信公众平台网页登录授权多次重定向跳转,导致code使用多次问题...
  5. window的onload事件和domcontentloaded
  6. 数码管显示的温湿度计——DHT11
  7. 如何禁止不必要的 HTTP 方法,如DELETE,PUT,OPTIONS等协议访问应用程序
  8. 程序员到底有没有必要考研?
  9. 微信小程序文学小说阅读销售网站
  10. Python问题:bash: syntax error near unexpected token `newline'