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

前言

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

详细开发流程主要代码

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界面显示_第3张图片

你可能感兴趣的:(图像处理,开发语言)