测试平台:
VMWare虚拟机中ubuntu 18.04
1、海康相机资料
资料下载:https://www.hikrobotics.com/cn
具体软件:
MVS是海康官方用sdk自己实现的相机控制软件,Runtime组件包是sdk开发库和驱动。
我用的是图中这两个软件版本,实际安装完后MVS的Runtime是4.3.0的,后来就用MVS里面的库和头文件了。一些例子可以查看doc文件夹下内容,官方例子比较权威。
MVS安装后结果:
我使用的是脚本安装,没用deb文件安装。
安装步骤:
1>解压MVS_STD_GML_V2.1.2_231225.zip
2>解压MVS-2.1.2_x86_64_20231225.tar.gz
3>进入MVS-2.1.2_x86_64_20231225中,查看INSTALL安装文件
执行完第三步,没用第四步测试,直接运行了MVS,可以获取图像,环境搭建OK.
2.使用Qt显示相机图像
这里主要是环境搭建。
Qt只用到了libMvCameraControl.so这一个库,程序完全可以用****这个。
查看官方例子Trigger_ImageCallback.cpp,发现只链接libMvCameraControl.so一个库,编译后MV_CC_Initialize()未定义,根据之前的经验没用到这个函数,则先屏蔽不用,这是第一个坑。之后完全抄写之前Windows的程序,编译OK。运行,报错,无法枚举到相机设备,报错代码,0x8000000,动态导入DLL失败,经过验证,把/opt/MVS/lib/64/下的库都添加到了Runtime,可以参考上次配置opencv3的过程,第二个坑。
再次运行就OK了。
效果是这样式的:
部分代码:
//打印相机型号及序列号
qDebug() << QString::fromLocal8Bit(reinterpret_cast<char*>(pDeviceInfo->SpecialInfo.stGigEInfo.chModelName));
qDebug() << QString::fromLocal8Bit(reinterpret_cast<char*>(pDeviceInfo->SpecialInfo.stGigEInfo.chSerialNumber));
//彩色相机判别
if('C' == pDeviceInfo->SpecialInfo.stGigEInfo.chModelName[12]){
m_isColor = true;
qDebug() << "==============color=================";
}
// 选择设备并创建句柄
nRet = MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[nIndex]);
if (MV_OK != nRet){
printf("MV_CC_CreateHandle fail! nRet [%x]\n", nRet);
return false;
}
// 打开设备
nRet = MV_CC_OpenDevice(handle);
if (MV_OK != nRet){
printf("MV_CC_OpenDevice fail! nRet [%x]\n", nRet);
return false;
}
// ch:探测网络最佳包大小(只对GigE相机有效)
if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE){
int nPacketSize = MV_CC_GetOptimalPacketSize(handle);
if (nPacketSize > 0){
nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize);
if(nRet != MV_OK)
{
printf("Warning: Set Packet Size fail nRet [0x%x]!\n", nRet);
}
}
else{
printf("Warning: Get Packet Size fail nRet [0x%x]!\n", nPacketSize);
}
}