海康机器人图像采集卡安装与使用


本文适用范围,包括海康CoaXPress:GX1004,Gige采集卡:GE1004,Cameralink:GC1002,操作方法,大同小异

1.安装环境要求

1.1主板硬件配置需求

在这里插入图片描述
图为:cxp采集卡
工控机:主板需支持PCIE Gen2 x8,内存8GB及其以上
操作系统:windows7 /10 64bits
(暂不支持linux等其他操作系统)

1.2软件安装

1.2.1 MVS软件安装

驱动下载安装:可以到海康机器人官网下载MVS安装
如有其他版本mvs,建议卸载后重新安装!
如装过MVFG等软件,建议卸载,MVFG已淘汰

默认安装后,安装成功后打开设备管理器,出现采集卡设备即表明安装完成,如下图所示:
CXP6采集卡
图为CXP采集卡
在这里插入图片描述
图为CML采集卡

2.软件使用

2.1枚举相机,取流

打开MVS软件,右键点击客户端中的【GenTL】并点击“选择cti文件”
在这里插入图片描述

路径中选择对应CTI路径:*C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64*
在这里插入图片描述
选择“MvFGProducerCML.cti“文件后,在MVS客户端刷新GenTL后就可以枚举到采集卡

在这里插入图片描述
点击采集卡列表右侧链接按钮,打开采集卡,出现采集卡相关参数,以及当前采集卡下面的相机
在这里插入图片描述
点击相机列表右侧链接按钮,即可链接打开相机
在这里插入图片描述

3.软件SDK二次开发

海康自研采集卡二次开发的有两种开发方式,各有优缺点

3.1基于工业相机SDK,通过GenTL进行二次开发(GIGE采集卡推荐,CXP卡也能使用)

CXP开发:
优点:
1.工业相机sdk开发简单,开发节奏快,基于工业网口相机代码,改动量超级小(改动量不超过10行)
2.其他品牌的CXP采集卡,如MIL rapxio系列、kaya,eursys采集卡也可参考BasicDemoByGenTL示例程序进行开发,代码兼容性好
缺点: 暂时无法配置采集卡相关参数,例如通过采集卡触发相机使用不方便(软触发相机,连续出流无此缺点,gige卡无此缺点)
参考工业相机例程BasicDemoByGenTL,
例程路径:“C:\Program Files (x86)\MVS\Development\Samples\VC\VS\BasicDemoByGenTL
在这里插入图片描述
在这里插入图片描述
基于Gentl枚举卡,枚举相机代码

		MV_GENTL_IF_INFO_LIST m_stIFInfoList;
		memset(&m_stIFInfoList, 0, sizeof(MV_GENTL_IF_INFO_LIST));
		MV_GENTL_DEV_INFO_LIST m_stDeviceList;
		memset(&m_stDeviceList, 0, sizeof(MV_GENTL_DEV_INFO_LIST));
		// ch:基于GenTL枚举Interface | en:Enum Interface Based On GenTL
		nRet = MV_CC_EnumInterfacesByGenTL(&m_stIFInfoList, "C:/Program Files/KAYA Instruments/Common/bin/KYFGLibGenTL_vc141.cti");
		if (MV_OK != nRet)
		{
			printf("Enum InterfacesByGenTL fail! nRet [0x%x]\n", nRet);
		}
		if (m_stIFInfoList.nInterfaceNum == 0)
		{
			printf("nInterfaceNum 0\n");
		}
		for (unsigned int i = 0; i < m_stIFInfoList.nInterfaceNum; i++)//打印枚举到的采集卡
		{
			char strUserName[256];
			MV_GENTL_IF_INFO* pstIFInfo = m_stIFInfoList.pIFInfo[i];
			sprintf_s(strUserName, "Interface[%d]:%s %s (%s) (%d)", i, pstIFInfo->chTLType, pstIFInfo->chInterfaceID, pstIFInfo->chDisplayName, pstIFInfo->nCtiIndex);
			printf("strUserName:%s\n", strUserName);
		}
		// ch:枚举板卡
		nRet = MV_CC_EnumDevicesByGenTL(m_stIFInfoList.pIFInfo[0], &m_stDeviceList);
		if (MV_OK != nRet)
		{
			printf("Enum DevicesByGenTL fail! nRet [0x%x]\n", nRet);
		}
		if (m_stDeviceList.nDeviceNum == 0)
		{
			printf("nDeviceNum 0\n");
		}
		// ch:选择设备并创建句柄 | en:Select device and create handle
		int index = 0;
		nRet = MV_CC_CreateHandleByGenTL(&handle, m_stDeviceList.pDeviceInfo[index]);
		if (MV_OK != nRet)
		{
			printf("Create Handle fail! nRet [0x%x]\n", nRet);
		}
		// ch:打开设备 | en:Open device
		nRet = MV_CC_OpenDevice(handle);
		if (MV_OK != nRet)
		{
			printf("Open Device fail! nRet [0x%x]\n", nRet);
		}

基于工业相机SDK枚举相机

		// ch:枚举设备 | Enum device
        MV_CC_DEVICE_INFO_LIST stDeviceList;
        memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
        nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList);
        if (MV_OK != nRet)
        {
            printf("Enum Devices fail! nRet [0x%x]\n", nRet);
        }
        if (stDeviceList.nDeviceNum > 0)
        {
            for (unsigned int i = 0; i < stDeviceList.nDeviceNum; i++)
            {
                printf("[device %d]:\n", i);
                MV_CC_DEVICE_INFO* pDeviceInfo = stDeviceList.pDeviceInfo[i];
                if (NULL == pDeviceInfo)
                {
                    break;
                } 
                PrintDeviceInfo(pDeviceInfo);            
            }  
        } 
        else
        {
            printf("Find No Devices!\n");
            break;
        }

        printf("Please Input camera index(0-%d):", stDeviceList.nDeviceNum-1);
        unsigned int nIndex = 0;
        scanf_s("%d", &nIndex);
        if (nIndex >= stDeviceList.nDeviceNum)
        {
            printf("Input error!\n");
        }
        // ch:选择设备并创建句柄 | Select device and create handle
        nRet = MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[nIndex]);
        if (MV_OK != nRet)
        {
            printf("Create Handle fail! nRet [0x%x]\n", nRet);
        }
        // ch:打开设备 | Open device
        nRet = MV_CC_OpenDevice(handle);
        if (MV_OK != nRet)
        {
            printf("Open Device fail! nRet [0x%x]\n", nRet);
        }

可以对比上面两段代码,在相机打开前,仅少量接口存在差异性,opendevice之后,相机操作,图像获取完全一致,代码开发量较少

3.2 基于采集卡SDK进行二次开发

优点: 能够完全访问控制采集卡所有参数,使用采集卡所有功能
缺点:
1.从0开发,全新理解sdk接口,开发量有点大
2.接口仅能兼容海康采集卡,其他品牌采集卡无法兼容
在这里插入图片描述

采集卡接口调用框架图,白色区域为采集卡相关接口,浅蓝色区域为相机相关接口,浅红色区域为流相关接口,浅绿色为缓存相关接口,绿色区域为用户自定义操作

示例程序路径:C:\Program Files (x86)\MVS\Development\MVFG
在这里插入图片描述

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!OpenCV是一个开源的计算机视觉库,可以用于图像处理和分析。它支持多种平台和编程语言,并提供了丰富的功能和算法。 要通过海康机器人工业相机使用OpenCV,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了OpenCV库。您可以通过官方网站(https://opencv.org/)下载适合您操作系统的版本,并按照安装指南进行安装。 2. 连接海康机器人工业相机到计算机。这通常需要使用相机的USB、Ethernet或者其他接口进行连接。 3. 使用OpenCV的VideoCapture类来访问相机。您可以创建一个VideoCapture对象,并指定相机的设备索引或者视频文件路径作为参数。例如,如果相机被识别为设备索引0,您可以使用以下代码创建一个VideoCapture对象: ```cpp #include <opencv2/opencv.hpp> int main() { cv::VideoCapture cap(0); // 使用设备索引0访问相机 if (!cap.isOpened()) { std::cout << "无法打开相机" << std::endl; return -1; } // 在这里可以使用OpenCV的其他功能处理相机的帧数据 return 0; } ``` 4. 使用OpenCV的其他功能来处理相机的帧数据。您可以使用VideoCapture对象的read()方法来获取相机的帧数据,并使用其他OpenCV函数进行图像处理、分析等操作。 这只是使用OpenCV通过海康机器人工业相机的基本流程,具体的操作可能因机器人相机型号和OpenCV版本而有所差异。您可以参考OpenCV的文档和海康机器人相机的官方文档来获取更详细的使用方法和示例代码。希望对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值