快速入门

您正在查看V2.1.0版本的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您想使用最新版本,可以从梅卡曼德下载中心下载。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持。

本章主要介绍如何使用Mech-Eye API来连接相机、设置相机参数、获取并保存数据。

Mech-Eye API 2.0.0更新了C++与C#的方法与参数名称。如果你已经安装Mech-Eye SDK 2.0.0,但是仍需使用之前编写的程序,请更新方法与参数名称。

准备工作

对于C++、C#、Python语言,需进行Mech-Eye SDK安装

对于Python语言,还需进行Python相关配置

搜索相机

准备工作完成后,可通过以下指令来搜索相机(使用枚举方法获得可连接的相机列表)。

std::vector<mmind::api::MechEyeDeviceInfo> deviceInfoList = mmind::api::MechEyeDevice::enumerateMechEyeDeviceList();
List<MechEyeDeviceInfo> deviceInfoList = MechEyeDevice.EnumerateMechEyeDeviceList();
self.device_list = self.device.get_device_list()

连接相机

搜索相机后,可通过以下指令连接相机,以连接相机列表中的第一个相机为例。

mmind::api::MechEyeDevice device;
device.connect(deviceInfoList[0]);
MechEyeDevice device = new MechEyeDevice();
device.Connect(deviceInfoList[0]);
self.device.connect(self.device_list[int(0)])

设置相机参数

连接相机后,可通过以下指令设置相机参数。

设置2D图参数

在使用相机采集2D图之前,需要设置相机的2D参数,包括曝光模式曝光时间等。

device.setScan2DExposureMode(mmind::api::Scanning2DSettings::Scan2DExposureMode::Timed);
device.setScan2DExposureTime(100);
device.SetScan2DExposureMode(Scan2DExposureMode.Timed);
device.SetScan2DExposureTime(100);
self.device.set_scan_2d_exposure_mode("Timed")
self.device.set_scan_2d_exposure_time(100.0)

设置深度图与点云参数

在使用相机采集用于计算深度数据的图像之前,需要设置影响深度图和点云质量的参数,包括曝光时间深度范围感兴趣区域点云后处理等。

device.setScan3DExposure(std::vector<double>{5, 10});
device.setDepthRange(mmind::api::DepthRange(100, 1000));
device.setScan3DROI(mmind::api::ROI(0, 0, 500, 500));
device.setCloudSmoothMode(
    mmind::api::PointCloudProcessingSettings::CloudSmoothMode::Normal);
device.setCloudOutlierFilterMode(
    mmind::api::PointCloudProcessingSettings::CloudOutlierFilterMode::Normal);
device.SetScan3DExposure(new List<double> {5, 10});
device.SetDepthRange(new DepthRange(100, 1000));
device.SetScan3DROI(new ROI(0, 0, 500, 500));
device.SetCloudSmoothMode(CloudSmoothMode.Normal);
device.SetCloudOutlierFilterMode(CloudOutlierFilterMode.Normal);
self.device.set_scan_3d_exposure([5.0, 10.0])
self.device.set_depth_range(100, 1000)
self.device.set_scan_3d_roi(0, 0, 500, 500)
self.device.set_cloud_smooth_mode("Normal")
self.device.set_cloud_outlier_filter_mode("Normal")

获取数据

完成相机参数设置后,可以触发相机采集图像并返回2D图及点云数据。

获取2D图

mmind::api::ColorMap color;
device.captureColorMap(color);
ColorMap color = new ColorMap();
device.CaptureColorMap(ref color);
color_map = device.capture_color()

获取点云数据

mmind::api::PointXYZMap pointXYZMap;
device.capturePointXYZMap(pointXYZMap);
PointXYZMap pointXYZMap = new PointXYZMap();
device.CapturePointXYZMap(ref pointXYZMap);
point_xyz = device.capture_point_xyz()

保存数据

保存2D图

将获取的2D图数据转化为OpenCV数据类型,并保存为png格式的图片文件。

const std::string colorFile = "ColorMap.png";
cv::Mat color8UC3 = cv::Mat(colorMap.height(), colorMap.width(), CV_8UC3, colorMap.data());
cv::imwrite(colorFile, color8UC3);
string colorFile = "colorMap.png";
Mat color8UC3 = new Mat(unchecked((int)colorMap.height()), unchecked((int)colorMap.width()), DepthType.Cv8U, 3, colorMap.data(), unchecked((int)colorMap.width()) * 3);
CvInvoke.Imwrite(colorFile, color8UC3);
color_file = "ColorMap.png"
cv2.imwrite(color_file, color_map.data())

保存点云

将获取的点云数据保存为ply格式的点云。

std::string pointCloudPath = "PointCloudXYZ.ply";
savePLY(pointXYZMap, pointCloudPath);
Mat depth32FC3 = new Mat(unchecked((int)pointXYZMap.height()), unchecked((int)pointXYZMap.width()), DepthType.Cv32F, 3, pointXYZMap.data(), unchecked((int)pointXYZMap.width()) * 12);
string pointCloudPath = "pointCloudXYZ.ply";
CvInvoke.WriteCloud(pointCloudPath, depth32FC3);
point_cloud_xyz = o3d.geometry.PointCloud()
points_xyz = np.zeros(
    (point_xyz.width() * point_xyz.height(), 3), dtype=np.float64)

pos = 0
for dd in np.nditer(point_xyz_data):
    points_xyz[int(pos / 3)][int(pos % 3)]= 0.001 * dd
    pos = pos + 1

point_cloud_xyz.points = o3d.utility.Vector3dVector(points_xyz)
o3d.io.write_point_cloud("PointCloudXYZ.ply", point_cloud_xyz)

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。