IDS相机SDK二次开发

接手的项目又用到了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);
#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_ExitCamera(hCam);
    }
    else
    {
        std::cout << "相机初始化失败!" << std::endl;
        std::cin.get();
        return 0;
    }
    std::cin.get();
    return 0;
}

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

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

猜你喜欢

转载自blog.csdn.net/qq_33810188/article/details/81111101