海康威视工业相机MV-CE060-10UC使用指北

海康威视工业面阵相机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安装

将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})
MV工业相机的使用遵循以下流程:

枚举设备 => 选择设备并创建句柄 => 打开设备 => 注册抓图回调 => 开始取流 => (回调函数逻辑)=> 停止取流 => 关闭设备 => 销毁句柄

在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