> 文章列表 > 海康工业相机SDK连接demo,Qt界面显示

海康工业相机SDK连接demo,Qt界面显示

海康工业相机SDK连接demo,Qt界面显示

前言

在机器视觉开发过程中,经常使用工业相机采集图像,以下采用海康机器人提供的SDK开发demo,使用语言C++,界面显示使用的Qt。SDK来自MVS 3.1版本中附属的Development文件夹。完整的项目链接地址为:
海康工业相机SDK的Demo源代码C++版本
附录海康工业相机的命名方式:
在这里插入图片描述
海康工业相机的开发流程一般为:
海康工业相机SDK连接demo,Qt界面显示

详细开发流程主要代码

1.搜索并选择相机。MV_CC_DEVICE_INFO_LIST是设备结构体 。海康的设备结构体与图像结构体是分开的。一个是硬件设备相关,一个是图像信息相关。

MV_CC_DEVICE_INFO_LIST stDeviceList;
memset(&stDeviceList,0,sizeof(MV_CC_DEVICE_INFO_LIST));
//----------------1.列举设备---------------------
iRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE ,&stDeviceList);
if(MV_OK != iRet)
{return;
}
//相机个数
int iNumber = stDeviceList.nDeviceNum;
MV_CC_DEVICE_INFO *pDeviceInfo = new MV_CC_DEVICE_INFO;
if(stDeviceList.nDeviceNum>0)
{for(unsigned int i =0;i<stDeviceList.nDeviceNum;i++){pDeviceInfo = stDeviceList.pDeviceInfo[i];if(NULL == pDeviceInfo){break;}}
}
else
{return;
}
'C' == pDeviceInfo->SpecialInfo.stUsb3VInfo.chModelName[12] ? isColor = true : isColor = false;
//---------------2.选择设备并创建句柄---------------
//选择第一个设备
iRet = MV_CC_CreateHandle(&cameraHandle,stDeviceList.pDeviceInfo[0]);
if(MV_OK != iRet)
{return;
}

2.打开相机并创建句柄

//------------------3.打开相机----------------------
iRet = MV_CC_OpenDevice(cameraHandle);
//------------------4.获取图像宽和高----------------
MVCC_INTVALUE ptValue;
MV_CC_GetWidth(cameraHandle,&ptValue);
imageWidth = ptValue.nCurValue;
MV_CC_GetHeight(cameraHandle,&ptValue);
imageHeight = ptValue.nCurValue;

3.设置采集模式。在工业相机领域,触发模式分为内外触发。在默认情况下,是关闭触发模式,相机此时出的是视频流;软触发可以理解为拍照片,点击一下,采集一张照片;硬触发是外部触发,外部发触发信号,相机采集一张图像;

//------------------5.设置采集模式--------------
QString qsAcquisitionMode = ui.acquisitionModeCombo ->currentText();
if("连续采集模式"==qsAcquisitionMode)
{//开启连续采集模式,即触发模式关闭,连续采集iRet = MV_CC_SetEnumValue(cameraHandle,"TriggerMode",MV_TRIGGER_MODE_OFF);
}
else if("触发模式" == qsAcquisitionMode)
{//开启触发模式,即触发模式开启MV_CC_SetEnumValue(cameraHandle,"TriggerMode",MV_TRIGGER_MODE_OFF);
}

4.设置触发源

//---------------6.设置触发源-----------------
QString qsTriggerSource = ui.triggerSourceCombo->currentText();
if("软触发"==qsTriggerSource)
{//开启软触发模式iRet = MV_CC_SetEnumValue(cameraHandle,"TriggerSource",7);
}
else
{ //其余触发模式暂不处理return;
}

5.修改相机参数(这里必须是相机打开后才能修改参数)

//------------7.设置相机曝光,增益等相关参数---------
int iExposureTime = ui.exposureEdit->text().toInt();
iRet = MV_CC_SetEnumValue(cameraHandle,"ExposureTime",iExposureTime);
int iGain = ui.gainEdit->text().toInt();
iRet = MV_CC_SetEnumValue(cameraHandle,"Gain",iExposureTime);

6.开始采集(可以自行设置图像显示的线程与显示像素的格式)

//开启采集
if(isGrabing)
{isGrabing = true;iRet = MV_CC_StartGrabbing(cameraHandle);
}

7.关闭采集,即关闭视频流

if(isGrabing)
{iRet = MV_CC_StopGrabbing(cameraHandle);
}
isGrabing = false;

8.关闭相机,这里需要在关闭相机后释放相关内存

//---------------最后一步,关闭相机------------------
//关闭设备
iRet = MV_CC_CloseDevice(cameraHandle);
//释放句柄
iRet = MV_CC_DestroyHandle(cameraHandle);

软件界面为
海康工业相机SDK连接demo,Qt界面显示