若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/163053843
长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…
Qt开发专栏:三方库开发技术
上一篇:没有了…
下一篇:敬请期待…
前言
海康的工业相机SDK开发。
MVS软件
海康机器人官方工业相机配套上位机软件MVS,用于海康全系列工业相机的设备发现、图像采集、参数调试、图像保存,是机器视觉项目调试标准工具。

左侧设备树栏
- GigE:千兆网口工业相机适配网卡列表,包含物理网卡、虚拟机虚拟网卡、无线网卡 WLAN;
- USB:USB3.0/USB XHC 工业相机控制器通道;
- Camera Link、GenTL:兼容第三方工业相机通用协议通道;
- 当前状态提示「无设备信息」:代表电脑未接入任何海康工业相机,未识别到采集设备。
主视觉展示区
背景为海康全产品线硬件阵列,覆盖完整机器视觉硬件生态:
- 底层:微型小靶面工业相机、紧凑型面阵相机;
- 中层:大靶面高分辨率面阵相机(CS 系列主流机型,黑白 / 彩色、全局 / 卷帘快门全覆盖);
- 上层:视觉光源控制器(恒流调光电源,配套视觉打光系统);
- 右下角:PCIe 图像采集卡,适配 Camera Link、CoaXPress 等高速接口相机。
硬件产品
CS 系列面阵工业相机(核心产品)
- 像素覆盖:160万~1.5亿超高分辨率;
- 接口类型:GigE、USB3.0、CoaXPress;
- 快门类型:全局快门(高速运动物体无拖影)、卷帘快门(静态检测高性价比);
- 应用:尺寸测量、缺陷检测、外观分拣、3D 视觉、半导体检测。
光源控制器
多通道数字调光电源,支持频闪、亮度分级调节,配合环形 / 条形 / 同轴光源完成工件打光。
PCIe高速采集卡
针对超大靶面、超高帧率相机,提供独立带宽,解决千兆网带宽瓶颈。
虚拟相机
MVS软件提供了虚拟相机的软件,这个方便软件的同时也同样方便我们调试sdk。

添加一个usb相机和gige相机:

提取SDK搭建Qt基础模板Demo
步骤一:确认带了开发sdk
下载mvs软件的时候,是否包含了开发sdk需要确认(下载好像会有说明),或者安装好后看,安装好包含sdk如下:


步骤二:新建Qt工程
Qt5.15.2,msvc2019x64版本。


步骤三:部署sdk


模块引入sdk:
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
$$PWD/HikvisionICamManager.h
SOURCES += \
$$PWD/HikvisionICamManager.cpp
# 海康sdk
HIKI_SDK_DIR = $$PWD/mvs_v4.3.2_sdk_v4.4.0.4_development
INCLUDEPATH += $$HIKI_SDK_DIR/Includes
LIBS += -L$$HIKI_SDK_DIR/Libraries/win64
LIBS += -lMvCameraControl
步骤四:Demo代码
参考流程:

实现搜索设备,展示对应信息:
void HikvisionICamManager::testEnv()
{
int ret = 0;
// 步骤一: 初始化sdk资源: 调用MV_CC_Initialize()初始化该SDK的运行环境,以便于提前申请和分配所必须的系统资源。
ret = MV_CC_Initialize();
if(ret != MV_OK)
{
LOG << "Failed to MV_CC_Initialize()";
return;
}
// 步骤二: 枚举所有设备: (可选)调用 MV_CC_EnumDevices() 枚举子网内指定传输协议对应的所有设备。 可通过nTLayerType在结构 MV_CC_DEVICE_INFO() 中获取设备信息。
MV_CC_DEVICE_INFO_LIST deviceInfoList;
memset(&deviceInfoList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
//
ret = MV_CC_EnumDevices(MV_GIGE_DEVICE // Gige设备
| MV_USB_DEVICE // USB设备
| MV_VIR_GIGE_DEVICE //
| MV_VIR_USB_DEVICE, // 虚拟USB设备
&deviceInfoList);
if(ret != MV_OK)
{
LOG << "Failed to MV_CC_EnumDevices()";
return;
}
// 步骤三:打印所有摄像头信息
if(deviceInfoList.nDeviceNum > 0)
{
for(int index = 0; index < deviceInfoList.nDeviceNum; index++)
{
MV_CC_DEVICE_INFO *pDeviceInfo = deviceInfoList.pDeviceInfo[index];
if(!pDeviceInfo)
{
break;
}
switch(pDeviceInfo->nTLayerType)
{
case MV_GIGE_DEVICE: // GigE设备
LOG << index << "type is" << "MV_GIGE_DEVICE" << "GigE设备";
{
int ip1 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24);
int ip2 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16);
int ip3 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8);
int ip4 = ( pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff);
LOG << QString("%1.%2.%3.%4").arg(ip1).arg(ip2).arg(ip3).arg(ip4);
LOG << QString("Name: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stGigEInfo.chUserDefinedName));
}
break;
case MV_1394_DEVICE: // 1394-a/b 设备
LOG << index << "type is" << "MV_1394_DEVICE" << "1394-a/b 设备";
break;
case MV_USB_DEVICE: // USB设备
LOG << index << "type is" << "MV_USB_DEVICE" << "USB设备";
{
LOG << QString("Name: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stGigEInfo.chUserDefinedName));
LOG << QString("Serial number: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stUsb3VInfo.chSerialNumber));
LOG << QString("Device number: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stUsb3VInfo.nDeviceNumber));
}
break;
case MV_CAMERALINK_DEVICE: // CameraLink设备
LOG << index << "type is" << "MV_CAMERALINK_DEVICE" << "CameraLink设备";
break;
case MV_VIR_GIGE_DEVICE: // 虚拟Gige设备
LOG << index << "type is" << "MV_VIR_GIGE_DEVICE" << "虚拟Gige设备";
break;
case MV_VIR_USB_DEVICE: // 虚拟USB设备
LOG << index << "type is" << "MV_VIR_USB_DEVICE" << "虚拟USB设备";
break;
case MV_GENTL_GIGE_DEVICE: // 自研网卡下GigE设备
LOG << index << "type is" << "MV_GENTL_GIGE_DEVICE" << "自研网卡下GigE设备";
break;
case MV_GENTL_CAMERALINK_DEVICE: // CameraLink相机设备
LOG << index << "type is" << "MV_GENTL_CAMERALINK_DEVICE" << "CameraLink相机设备";
break;
case MV_GENTL_CXP_DEVICE: // CoaXPress设备
LOG << index << "type is" << "MV_GENTL_CXP_DEVICE" << "CoaXPress设备";
break;
case MV_GENTL_XOF_DEVICE: // XoF设备
LOG << index << "type is" << "MV_GENTL_XOF_DEVICE" << "XoF设备";
break;
default: // 未知设备类型,保留意义
LOG << index << "type is" << "MV_UNKNOW_DEVICE" << "未知设备类型,保留意义";
break;
}
}
}
// 步骤四: 释放SDK资源: 调用 MV_CC_Finalize()释放SDK资源。
MV_CC_Finalize();
LOG;
}
步骤五:运行结果

模块化
hikvisionICamManager,.pri
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
$$PWD/HikvisionICamManager.h
SOURCES += \
$$PWD/HikvisionICamManager.cpp
# 海康sdk
HIKI_SDK_DIR = $$PWD/mvs_v4.3.2_sdk_v4.4.0.4_development
INCLUDEPATH += $$HIKI_SDK_DIR/Includes
LIBS += -L$$HIKI_SDK_DIR/Libraries/win64
LIBS += -lMvCameraControl

工程模板v1.0.0

上一篇:没有了…
下一篇:敬请期待…
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/163053843
1万+

被折叠的 条评论
为什么被折叠?



