海康威视工业面阵相机MV-CE060-10UC非UVC设备,欲使用该工业相机进行二次开发,需使用MVS机器视觉工业相机客户端。本文以x86架构下Linux系统为例,具体操作系统为Ubuntu 20.04,介绍该工业相机的使用方法。
海康威视工业面阵相机MV-CE060-10UC的具体性能参数如下:
条目 | 值 |
---|---|
传感器类型 | CMOS,卷帘快门 |
传感器型号 | IMX178 |
像元尺寸 | 2.4 µm×2.4 µm |
靶面尺寸 | 1/1.8" |
分辨率 | 3072×2048 |
最大帧率 | 42.7 fps@3072×2048 |
动态范围 | 71.3 dB |
信噪比 | 41.3 dB |
增益 | 0 dB ~20 dB |
曝光时间 | 24 μs ~ 1 sec |
快门模式 | 支持自动曝光、手动曝光、一键曝光以及 Global Reset |
黑白/彩色 | 彩色 |
像素格式 | Mono 8/10/12 Bayer RG 8/10/10p/12/12p YUV422Packed,YUV422_YUYV_Packed RGB 8,BGR 8 |
Binning | 支持 1×1,2×2 |
下采样 | 不支持 |
镜像 | 支持水平镜像 |
技术资料下载
工业相机MVS下载(本文使用MVS V2.1.1 Linux为例)
将MVS_STD_GML_V2.1.1_211224.zip下载到本机,将其解压可得到aarch64, armhf, i386, x86_64等不同架构下的安装包,本文选择x86_64 deb包,使用dpkg安装。如使用aarch环境,则使用 MVS-2.1.1_aarch64_20211224.deb 这个包
$ unzip MVS_STD_GML_V2.1.1_211224.zip
$ sudo dpkg -i MVS-2.1.1_x86_64_20211224.deb
等待安装完毕,默认情况下该软件安装到 /opt/MVS/
使用以下命令打开MVS应用程序
$ /opt/MVS/bin/MVS.sh
# 若出现无法打开的问题,尝试切换到 /opt/MVS/bin/ 目录下重试
$ cd /opt/MVS/bin/
$ ./MVS.sh
通常情况下,MVS应用程序供初次使用该相机时调试相机参数使用,例如曝光时间,增益参数等,这样在二次开发时无需重新设置参数。但是请注意,设置好的参数在相机断电后不会保存,所以应及时保存用户设置,如需下次上电后自动选择之前的参数,应在MVS应用程序中做设置。
本文介绍如何从MV工业相机中采集图像,转换到OpenCV(本文以3.4.5为例) cv::Mat图像格式,便于进一步开发。
在进行编程之前,应在编译规则中加入(以CMake为例):
include_directories(/opt/MVS/include/)
link_directories(/opt/MVS/lib/64/)
# 若在 aarch 架构下使用,请使用 link_directories(/opt/MVS/lib/aarch64/)
target_link_libraries(${PROJECT_NAME}
MvCameraControl)
# 由于使用了OpenCV,也应加入:
find_package(OpenCV 3 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
枚举设备 => 选择设备并创建句柄 => 打开设备 => 注册抓图回调 => 开始取流 => (回调函数逻辑)=> 停止取流 => 关闭设备 => 销毁句柄
在MVS安装好后,将能够调用摄像头相关的API,常用API如下:
// 头文件
#include "MvCameraControl.h"
#include "opencv2/core.hpp"
int deviceIndex = 0;
void *handle = nullptr;
MV_CC_DEVICE_INFO_LIST stDeviceList;
MVCC_INTVALUE stParam;
unsigned char *pData;
cv::Mat curFrame;
// 回调函数
void __stdcall ImageCallBackExForBGR8(unsigned char *pData, MV_FRAME_OUT_INFO_EX *pFrameInfo, void *pUser) {
curCamera->curFrame = cv::Mat(pFrameInfo->nHeight, pFrameInfo->nWidth, CV_8UC3, pData);
}
// 枚举设备
memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList);
if (stDeviceList.nDeviceNum > 0) {
for (int i = 0; i < stDeviceList.nDeviceNum; ++i) {
printf("[device %d]:\n", i);
MV_CC_DEVICE_INFO *pDeviceInfo = stDeviceList.pDeviceInfo[i];
}
} else {
printf("Find No Devices!\n");
}
// 选择设备并创建句柄
MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[deviceIndex]);
// 打开设备
MV_CC_OpenDevice(handle);
// 注册抓图回调
MV_CC_RegisterImageCallBackForBGR(handle, ImageCallBackExForBGR8, handle);
// 开始取流
MV_CC_StartGrabbing(handle);
MV_FRAME_OUT_INFO_EX stImageInfo = {0};
memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT_INFO_EX));
pData = (unsigned char *)malloc(sizeof(unsigned char) * stParam.nCurValue);
// 停止取流
MV_CC_StopGrabbing(handle);
// 关闭设备
MV_CC_CloseDevice(handle);
// 销毁句柄
MV_CC_DestroyHandle(handle);
详细使用方法已上传到Gitee,并且已封装好。参见https://gitee.com/shenhaoyuan/hikrobot-mvcamera
作者:Hoyin
最后编辑时间:2022/2/21
联系作者:[email protected]