576 lines
22 KiB
C
576 lines
22 KiB
C
#ifndef __VIZUM_UTILS_HEADER__
|
||
#define __VIZUM_UTILS_HEADER__
|
||
|
||
/*****************************************************************************
|
||
* Vizum Detect SDK Utils *
|
||
* Copyright (C) 2022 Vizum Technology. *
|
||
* *
|
||
* This file is part of VizumSDK. *
|
||
* * *
|
||
* *
|
||
* @file VZNL_Utils.h *
|
||
* @brief 包含部分图像生成的方式 *
|
||
* Details. *
|
||
* *
|
||
* @author Vizum *
|
||
* @email *
|
||
* @date 2022/07/03 *
|
||
* *
|
||
*----------------------------------------------------------------------------*
|
||
* Remark : Description *
|
||
*----------------------------------------------------------------------------*
|
||
* Change History : *
|
||
* <Date> | <Version> | <Author> | <Description> *
|
||
*----------------------------------------------------------------------------*
|
||
* 2022/07/03 | 3.6.17.10 | Vizum | 增加了2D图生成工具 *
|
||
*----------------------------------------------------------------------------*
|
||
* *
|
||
*****************************************************************************/
|
||
|
||
#include "VZNL_Export.h"
|
||
#include "VZNL_Types.h"
|
||
|
||
typedef struct
|
||
{
|
||
union {
|
||
struct
|
||
{
|
||
unsigned int bNoFirewallToken : 1; //< 是否有防火墙权限
|
||
unsigned int bNetWork100M : 1; //< 设备中含有 100M 网络
|
||
unsigned int bSameMACDevice : 1; //< 有相同MAC的设备
|
||
unsigned int bVLANError : 1; //< IP不在同网段
|
||
unsigned int bIsAdmin : 1; //< 是否管理员权限
|
||
unsigned int bOpenJumboFrame : 1; //< 是否开启了巨型帧
|
||
unsigned int bIPConflict : 1; //< 是否存在IP地址冲突
|
||
};
|
||
|
||
unsigned int nCheckMask; //< 当为0时表示都符合要求
|
||
};
|
||
unsigned int nHostNetCardCnt; //本机网卡数量
|
||
SVzNetCardInfo* sHostNetCard; //本机网卡列表
|
||
unsigned int nSameMACDeviceCnt; //有相同MAC的设备数量
|
||
SVzNLEyeCBInfo* sSameMACDevice; //相同MAC的设备IP列表
|
||
unsigned int nVLANErrorDeviceCnt; //IP不在同网段的设备数量
|
||
SVzNLEyeCBInfo* sVLANErrorDevice; //IP不在同网段的设备IP列表
|
||
unsigned int nIPConflictDeviceCnt; //IP地址冲突的设备数量
|
||
SVzNLEyeCBInfo* sIPConflictDevice; //IP地址冲突的设备IP列表
|
||
} SVzCheckPlatformInfo;
|
||
|
||
/**
|
||
* @brief 检测运行环境
|
||
* @param psPlatformInfo 环境信息
|
||
* @return 返回VzTrue说明一切正常,返回VzFalse表示有信息不匹配的地方
|
||
*/
|
||
VZNLAPI int VzNL_CheckPlatform(SVzCheckPlatformInfo* psPlatformInfo);
|
||
|
||
/// @name 静态相机图像生成工具集
|
||
/// @{
|
||
/**
|
||
* @brief 使用固定点云数据生成深度图
|
||
* @param eDataType 数据类型
|
||
* @param p3DPoint 3D点云数组
|
||
* @param nPointCount 点的个数
|
||
* @param sDepthMapParam 深度图参数
|
||
* @param ppImageData 图像
|
||
* @return 返回0表示正常
|
||
*/
|
||
VZNLAPI int VzNL_CreateDepthMapImage(EVzResultDataType eDataType, void* p3DPoint, unsigned int nPointCount, SVzDepthMapImgCtlPara* sDepthMapParam, SVzNLImageData** ppImageData);
|
||
|
||
/**
|
||
* @brief 使用固定点云生成灰度图
|
||
* @param eDataType 数据类型
|
||
* @param p3DPoint 3D点云数组
|
||
* @param nPointCount 点的个数
|
||
* @param fXYScale XY比例
|
||
* @param ppImageData 图像
|
||
* @return 返回0表示正常
|
||
*/
|
||
VZNLAPI int VzNL_CreateGrayImage(EVzResultDataType eDataType, void* p3DPoint, unsigned int nPointCount, float fXYScale, SVzNLImageData** ppImageData);
|
||
/// @}
|
||
|
||
/**
|
||
* @brief 读取图像
|
||
* @param szFileName [in] 要读取的文件全路径
|
||
* @param ppImageData [out] 无压缩图像实例
|
||
* @return 返回0表明正确
|
||
*/
|
||
VZNLAPI int VzNL_LoadImageFromFile(const char* szFileName, SVzNLImageData** ppImageData);
|
||
|
||
/**
|
||
* @brief 从tif文件中加载3D点云
|
||
* @param lpszFile 文件全路径
|
||
* @param nImageWidth 图像宽
|
||
* @param nImageHeight 图像高
|
||
* @param eDataType 数据类型
|
||
* @param p3DPoint 3D点指针
|
||
* @return 返回0表示正常
|
||
*/
|
||
VZNLAPI int VzNL_LoadDepthMapTiffImage(const char* lpszFile, unsigned int* nImageWidth, unsigned int* nImageHeight, SVzNL3DPointF* p3DPoint, unsigned int* nPointCount);
|
||
|
||
/**
|
||
* @brief 将3D点云数据存储为Tif深度图
|
||
* @param lpszFile 文件全路径
|
||
* @param nImageWidth 图像宽
|
||
* @param nImageHeight 图像高
|
||
* @param eDataType 数据类型
|
||
* @param p3DPoint 3D点指针
|
||
* @return 返回0表示正常
|
||
*/
|
||
VZNLAPI int VzNL_SaveDepthMapTiffImage(const char* lpszFile, unsigned int nImageWidth, unsigned int nImageHeight, EVzResultDataType eDataType, void* p3DPoint);
|
||
|
||
/// @name 点云后处理工具
|
||
/// @{
|
||
|
||
/**
|
||
* @brief 深度图图像回调
|
||
* @param pImageData 传出处理后的图像 [输出参数]
|
||
* @param pParam 回调传递的数据 [输出参数]
|
||
*/
|
||
typedef void(*VzNL_OnOutputCloudPointAPData)(const SVzNLImageData* psImageData, const SVz3DPointMapTable* psPointMapTable, void* pParam);
|
||
|
||
/**
|
||
* @brief 创建点云后处理工具Handle
|
||
* @return 返回深度图的句柄
|
||
*/
|
||
VZNLAPI VZNLPOINTCLOUDHANDLE VzNL_CreateCloudPointAPTool();
|
||
|
||
/**
|
||
* @brief 当配置自适应参数时,选择绑定设备Handle
|
||
*/
|
||
VZNLAPI int VzNL_AttachHandleForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool, VZNLHANDLE hDevice);
|
||
|
||
/**
|
||
* @brief 当配置自适应参数时,可以选择绑定检测工具Handle
|
||
*/
|
||
VZNLAPI int VzNL_AttachDetectToolForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool, VZNLDETECTHANDLE hDetectHandle);
|
||
|
||
/**
|
||
* @brief 当配置自适应参数时,绑定设备Handle
|
||
*/
|
||
VZNLAPI int VzNL_DetachHandleForCloudPointAP(VZNLPOINTCLOUDHANDLE hCloudPointTool);
|
||
|
||
/**
|
||
* @brief 设置3D点云基准激光线(当生成灰度/深度图时需要配置), 配置后内部的图像参数会进行改变,若查看参数信息请调用 VzNL_GetCloudPointAPParam
|
||
* @param hCloudPointTool 点云工具句柄
|
||
* @param p3DPosition 3D数据
|
||
* @param nPointCount 3D点的个数
|
||
*/
|
||
VZNLAPI int VzNL_SetCloudPointAPBaseLine(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzNL3DPosition* p3DPosition, unsigned int nPointCount);
|
||
|
||
/**
|
||
* @brief 设置深度图/灰度图配置参数(当生成灰度/深度图时需要配置)
|
||
* @param hCloudPointTool 点云工具句柄
|
||
* @param psDepthMapParam 深度图配置参数
|
||
*/
|
||
VZNLAPI int VzNL_SetCloudPointAPParam(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzDepthMapImgCtlPara* psDepthMapParam);
|
||
|
||
/**
|
||
* @brief 启用基准线深度值计算模式(当生成灰度/深度图时需要配置)
|
||
* @param hCloudPointTool 点云工具句柄
|
||
* @param bEnable VzTrue 启用 / VzFalse 禁用
|
||
* @note 基准线模式:bEnable = VzTrue 当深度计算需要用当前一条线作为高度基准时,配置为此模式,例如激光线照射U型皮带,会形成高低不等的一条激光线,这个时候
|
||
* U型皮带上的各个点均为自身位置的0点位置
|
||
*/
|
||
VZNLAPI int VzNL_EnableCloudPointAPBaseLineMode(VZNLPOINTCLOUDHANDLE hCloudPointTool, VzBool bEnable);
|
||
VZNLAPI VzBool VzNL_IsEnableCloudPointAPBaseLineMode(VZNLPOINTCLOUDHANDLE hCloudPointTool);
|
||
|
||
/**
|
||
* @brief 设置输出图像的最小宽度(当生成灰度 / 深度图时需要配置)
|
||
* @paramhCloudPointTool 点云工具句柄
|
||
* @paramnMinImageWidth 输出图像的最小宽度
|
||
*/
|
||
VZNLAPI int VzNL_SetCloudPointAPImageWidth(VZNLPOINTCLOUDHANDLE hCloudPointTool, unsigned int nMinImageWidth);
|
||
|
||
/**
|
||
* @brief 获取点云配置
|
||
* @paramhCloudPointTool 点云工具句柄
|
||
* @psDepthMapParam [out] 点云配置
|
||
*/
|
||
VZNLAPI int VzNL_GetCloudPointAPParam(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzDepthMapImgCtlPara* psDepthMapParam);
|
||
|
||
/**
|
||
* @brief 获取输出图像的最小宽度(当生成灰度 / 深度图时需要配置)
|
||
* @paramhCloudPointTool 点云工具句柄
|
||
* @pnImageHeight [out] 输出图像高度
|
||
*/
|
||
VZNLAPI int VzNL_GetCloudPointAPImageHeight(VZNLPOINTCLOUDHANDLE hCloudPointTool, int* pnImageHeight);
|
||
|
||
/**
|
||
* @brief 开始点云处理(目前仅支持 keResultDataType_Position)
|
||
* @param hCloudPointTool 点云工具句柄
|
||
* @param eAfterProcType 图像后处理类型 kePointAfterProcType_DepthMap(深度图) kePointAfterProcType_GrayPic(灰度图)
|
||
* @param eDataType 激光线数据 SVzLaserLineData 的数据类型
|
||
* @param eDirect 激光线扫描方向
|
||
* @param pDepthMap 深度图的回调
|
||
* @param pParam 回调函数的参数
|
||
* @return 返回0则为正确,返回非0为错误,可通过VzNL_GetErrorInfo 获取错误信息
|
||
*/
|
||
VZNLAPI int VzNL_BeginCloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool, EVzPointAfterProcType eAfterProcType, EVzResultDataType eDataType, EVzObjRunDirect eDirect, VzNL_OnOutputCloudPointAPData pDepthMap, void* pParam);
|
||
|
||
/**
|
||
* @brief 点云处理(目前仅支持 keResultDataType_Position)
|
||
* @param hCloudPointTool 点云工具句柄
|
||
* @param psLineData 激光线数据
|
||
*/
|
||
VZNLAPI int VzNL_CloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool, SVzLaserLineData* psLineData);
|
||
|
||
/**
|
||
* @brief 结束点云处理
|
||
* @param hCloudPointTool 点云工具句柄
|
||
*/
|
||
VZNLAPI int VzNL_EndCloudPointAfterProc(VZNLPOINTCLOUDHANDLE hCloudPointTool);
|
||
|
||
/**
|
||
* @brief 销毁点云处理工具
|
||
* @param hCloudPointTool 点云工具句柄
|
||
*/
|
||
VZNLAPI int VzNL_DestroyCloudPointAPTool(VZNLPOINTCLOUDHANDLE hCloudPointTool);
|
||
/// @}
|
||
|
||
/// @name 图像生成工具
|
||
/// @{
|
||
|
||
/**
|
||
* @brief 创建图像生成工具
|
||
* @param hDevice 设备句柄
|
||
*/
|
||
VZNLAPI VZNLIMAGEGENERATOR VzNL_CreateImageGenerator(VZNLHANDLE hDevice);
|
||
|
||
/**
|
||
* @brief 开始送入点云数据
|
||
* @param hImageGenerator 图像生成工具
|
||
* @param eDataType 送入数据的类型,目前仅支持 keResultDataType_PointXYZRGBA 与 keResultDataType_PointGray
|
||
* keResultDataType_PointGray 输出图像为 8 bit 灰度图
|
||
* keResultDataType_PointGray 输出图像为 24 bit 彩色图
|
||
*/
|
||
VZNLAPI int VzNL_BeginPushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, EVzResultDataType eDataType);
|
||
|
||
/**
|
||
* @brief 送入点云数据进行处理
|
||
* @param hImageGenerator 图像生成工具
|
||
* @param psLineData 激光线数据
|
||
*/
|
||
VZNLAPI int VzNL_PushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, SVzLaserLineData* psLineData);
|
||
|
||
/**
|
||
* @brief 结束点云传送
|
||
* @param hImageGenerator 图像生成工具
|
||
*/
|
||
VZNLAPI int VzNL_EndPushPointToImageGenerator(VZNLIMAGEGENERATOR hImageGenerator);
|
||
|
||
/**
|
||
* @brief 通过图像生成工具,生成图像
|
||
* @param hImageGenerator 图像生成工具
|
||
* @param psLineData 图像数据
|
||
*/
|
||
VZNLAPI int VzNL_GetImageFromImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, SVzNLImageData** ppImageData);
|
||
|
||
/**
|
||
* @brief 通过图像生成工具,生成图像
|
||
* @param hImageGenerator 图像生成工具
|
||
* @param lpszFile 文件名 tif
|
||
*/
|
||
VZNLAPI int VzNL_SaveDepthMapImageFromImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, const char* lpszFile);
|
||
|
||
/**
|
||
* @brief 通过2D位置找3D点
|
||
* @param hImageGenerator 图像生成工具
|
||
* @param psLineData 3D数据
|
||
*/
|
||
VZNLAPI int VzNL_Find3DPointFrom2DPosForImageGenerator(VZNLIMAGEGENERATOR hImageGenerator, int nX, int nY, SVzNLPointXYZ* p3DPoint);
|
||
|
||
/**
|
||
* @brief 销毁图像创建工具
|
||
* @param hImageGenerator 图像生成工具
|
||
*/
|
||
VZNLAPI int VzNL_DestroyImageGenerator(VZNLIMAGEGENERATOR hImageGenerator);
|
||
|
||
|
||
/*
|
||
* 功能:将输入的点云数据转换为指定分辨率的 2D 伪彩图像输出
|
||
* 参数说明:
|
||
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
|
||
* unsigned int nPointCnt: 输入 pPointList 中点数据个数;
|
||
* void* pPointList: 输入点数据列表。
|
||
* unsigned int nImageWidth: 输入希望输出的图像宽度;
|
||
* unsigned int nImageHeight: 输入希望输出的图像高度;
|
||
* unsigned int nColorGradient: 输出点数据颜色梯度
|
||
* unsigned int nEdgeMargin: 输入图像边缘的留白宽度(像素值,四边留白);
|
||
* SVzNLImageData* pImage: 输出的图像数据;
|
||
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,用于从图像回算到点云;
|
||
*/
|
||
VZNLAPI int VzNL_PointCloudTo2DFixedSizeImage(EVzResultDataType eDataType,
|
||
unsigned int nPointCnt,
|
||
void* pPointList,
|
||
unsigned int nImageWidth,
|
||
unsigned int nImageHeight,
|
||
unsigned int nColorGradient,
|
||
unsigned int nEdgeMargin,
|
||
SVzNLImageData* pImage,
|
||
SVzPColorImageConvertInfo* pConvertInfo);
|
||
|
||
/*
|
||
* 功能:将输入的点云数据转换为指定像素精度的 2D 伪彩图像输出
|
||
* 参数说明:
|
||
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
|
||
* unsigned int nPointCnt: 输入 pPointList 中点数据个数;
|
||
* void* pPointList: 输入点数据列表。
|
||
* float fWHPixelResolution: 输入图像像素精度,代表每个像素对应的实际物理距离,例如:0.1 表示像素间隔为0.1毫米;
|
||
* unsigned int nColorGradient: 输出点数据颜色梯度
|
||
* unsigned int nEdgeMargin: 输入图像边缘的留白宽度(像素值,四边留白);
|
||
* SVzNLImageData* pImage: 输出的图像数据;
|
||
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,用于从图像回算到点云;
|
||
*/
|
||
VZNLAPI int VzNL_PointCloudTo2DFixedResolutionImage(EVzResultDataType eDataType,
|
||
unsigned int nPointCnt,
|
||
void* pPointList,
|
||
float fWHPixelResolution,
|
||
unsigned int nColorGradient,
|
||
unsigned int nEdgeMargin,
|
||
SVzNLImageData* pImage,
|
||
SVzPColorImageConvertInfo* pConvertInfo);
|
||
|
||
|
||
/*
|
||
* 释放输出的图像数据
|
||
*/
|
||
VZNLAPI int VzNL_PointCloudTo2DImageRelease(SVzNLImageData* pImage);
|
||
|
||
/*
|
||
* 功能:基于伪彩图像上的点坐标回算3D点云点坐标(输出点云中距离最近的点坐标)
|
||
* 参数说明:
|
||
* SVzNLImageData* pImage: 输入由点云生成的伪彩图像;
|
||
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
|
||
* unsigned int nPointCntIn: 输入 pPointList 中点数据个数;
|
||
* void* pPointListIn: 输入点数据列表。
|
||
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,生成伪彩图时的信息
|
||
* SVzPColorImageTo3DPointMethod eConvertMethod: 回算点输出方法
|
||
* unsigned int n2DPointCntIn: 输入伪彩图像上的2D点坐标个数
|
||
* SVzNL2DPoint* p2DPointListIn: 输入伪彩图上的2D 点坐标列表
|
||
* double dSearchDis: 从点云中搜索目标点的搜索范围
|
||
* SVzNL3DPoint* p3DPointList: 输出2D坐标列表回算到3D 点的坐标列表,外部分配好空间
|
||
*/
|
||
VZNLAPI int VzNL_Get3DPointsFrom2DPseudoColorImagePoints(SVzNLImageData* pImage,
|
||
EVzResultDataType eDataType,
|
||
unsigned int nPointCntIn,
|
||
void* pPointListIn,
|
||
SVzPColorImageConvertInfo* pConvertInfo,
|
||
SVzPColorImageTo3DPointMethod eConvertMethod,
|
||
unsigned int n2DPointCntIn,
|
||
SVzNL2DPoint* p2DPointListIn,
|
||
double dSearchDis,
|
||
SVzNL3DPoint* p3DPointList);
|
||
|
||
/*
|
||
* 功能:基于伪彩图像上的ROI区域获取对应区域的点云数据(点数据类型与输入一致)
|
||
* 参数说明:
|
||
* SVzNLImageData* pImage: 输入由点云生成的伪彩图像;
|
||
* EVzResultDataType eDataType: 输入点数据类型,内部根据数据类型解析数据;
|
||
* unsigned int nPointCntIn: 输入 pPointList 中点数据个数;
|
||
* void* pPointListIn: 输入点数据列表。
|
||
* SVzPColorImageConvertInfo* pConvertInfo: 转换信息,生成伪彩图时的信息
|
||
* SVzNL2DRect s2DRect: 输入伪彩图上的目标区域;
|
||
* unsigned int* pPointCntOut: 输出目标区域内的3D 点云数据点个数;
|
||
* void** ppPointListOut: 输出目标区域内的3D 点云数据列表,点数据类型与输入一致
|
||
*/
|
||
VZNLAPI int VzNL_Get3DPointListFrom2DPseudoColorImageRect(SVzNLImageData* pImage,
|
||
EVzResultDataType eDataType,
|
||
unsigned int nPointCntIn,
|
||
void* pPointListIn,
|
||
SVzPColorImageConvertInfo* pConvertInfo,
|
||
SVzNL2DRect s2DRect,
|
||
unsigned int* pPointCntOut,
|
||
void** ppPointListOut);
|
||
|
||
/*
|
||
* 释放从2D 伪彩图回算得到的3D 点坐标列表,适用于如下函数生成的点列表:
|
||
* VzNL_Get3DPointListFrom2DPseudoColorImageRect()
|
||
*/
|
||
VZNLAPI int VzNL_2DPseudoColorImage3DPointListRelease(unsigned int* pPointCnt, void** ppPointList);
|
||
|
||
|
||
/**
|
||
* @brief 创建RGB点云处理工具
|
||
* @param hDevice 设备句柄
|
||
*/
|
||
VZNLAPI VZNLRGBCLOUDPOINTTOOL VzNL_CreateRGBCloudPointTool(VZNLHANDLE hDevice);
|
||
|
||
|
||
/**
|
||
* @brief 开始送入点云数据
|
||
* @param hRGBCloudPointTool RGB点云处理工具
|
||
* @param eDataType 送入数据的类型,目前仅支持 keResultDataType_PointXYZRGBA 与keResultDataType_PointRGBA_D
|
||
*/
|
||
VZNLAPI int VzNL_BeginPushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, EVzResultDataType eDataType);
|
||
|
||
/**
|
||
* @brief 送入点云数据进行处理
|
||
* @param hRGBCloudPointTool RGB点云处理工具
|
||
* @param psLineData 激光线数据
|
||
*/
|
||
VZNLAPI int VzNL_PushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, SVzLaserLineData* psLineData);
|
||
|
||
/**
|
||
* @brief 通过2D位置找3D点
|
||
* @param hRGBCloudPointTool RGB点云工处理工具
|
||
* @param s2DPoint 2D数据
|
||
* @param p3DPoint 3D数据
|
||
*/
|
||
VZNLAPI int VzNL_Find3DPointFrom2DPosForRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, const SVzNL2DPoint s2DPoint, SVzNL3DPoint* p3DPoint);
|
||
|
||
|
||
/**
|
||
* @brief 通过3D点找2D位置
|
||
* @param hRGBCloudPointTool RGB点云工处理工具
|
||
* @param s3DPoint 3D数据
|
||
* @param p2DPoint 2D数据
|
||
*/
|
||
VZNLAPI int VzNL_Find2DPosFrom3DPointForRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool, const SVzNL3DPoint s3DPoint, SVzNL2DPoint* p2DPoint);
|
||
|
||
/**
|
||
* @brief 结束RGB点云处理
|
||
* @param hRGBCloudPointTool RGB点云工处理工具
|
||
*/
|
||
VZNLAPI int VzNL_EndPushPointToRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool);
|
||
|
||
/**
|
||
* @brief 销毁RGB点云工处理工具
|
||
* @param hRGBCloudPointTool RGB点云工处理工具
|
||
*/
|
||
VZNLAPI int VzNL_DestroyRGBCloudPointTool(VZNLRGBCLOUDPOINTTOOL hRGBCloudPointTool);
|
||
|
||
/**
|
||
* @brief 通过双目校正图2D 坐标计算3D 点坐标,根据当前设备内部参数计算
|
||
* @param hDevice 输入设备句柄
|
||
* @param nPointCnt 输入点个数
|
||
* @param p2DPointList 输入双目校正图2D 点坐标列表
|
||
* @param p3DPointList 输出计算得到的3D 点列表
|
||
*/
|
||
VZNLAPI int VzNL_Cal3DPointsFromStereo2DPoints(VZNLHANDLE hDevice, unsigned int nPointCnt, SVzNL2DLRPoint* p2DPointList, SVzNL3DPoint* p3DPointList);
|
||
|
||
/**
|
||
* @brief 输入2D RGB图像数据 + 扫描点云数据(静态RGBD扫描),获取映射后的2D RGB图像数据和同分辨率的点云序列
|
||
* @param hDevice 输入设备句柄
|
||
* @param pRGBImage 输入与点云匹配的RGB 图像
|
||
* @param eDataType 输入点云数据类型,同样也为输出的点云数据类型
|
||
* @param nLineCnt 输入激光线数据条数
|
||
* @param pLineDataList 输入激光线数据列表
|
||
* @param bEnableClip 输入是否进行有效图像裁剪,true:输出点云实际对应的有效图像区域及映射点云;false:输出原始图像及映射点云;
|
||
* @param ppOutImage 输出处理后的图像(参考 bEnableClip 标志决定是否裁剪图像)
|
||
* @param pPointCnt 输出点云数据中的点个数
|
||
* @param ppMappedPointList 输出映射后与ppOutImage 相同分辨率的点云数据,点数据类型为eDataType
|
||
*/
|
||
VZNLAPI int VzNL_GetMappedRGBImageAndPointCloud(VZNLHANDLE hDevice,
|
||
SVzNLImageData* pRGBImage,
|
||
EVzResultDataType eDataType,
|
||
unsigned int nLineCnt,
|
||
SVzLaserLineData* pLineDataList,
|
||
bool bEnableClip,
|
||
SVzNLImageData** ppOutImage,
|
||
unsigned int* pPointCnt,
|
||
void** ppMappedPointList);
|
||
|
||
/**
|
||
* @brief 输入左目或右目图像数据 + 扫描点云数据(静态非RGBD扫描),获取映射后的2D 左目或右目图像数据和同分辨率的点云序列
|
||
* @param hDevice 输入设备句柄
|
||
* @param bIsRightImage 输入当前图像是否为右目图像
|
||
* @param pImage 输入与点云匹配的左目或右目图像数据
|
||
* @param eDataType 输入点云数据类型,同样也为输出的点云数据类型
|
||
* @param nLineCnt 输入激光线数据条数
|
||
* @param pLineDataList 输入激光线数据列表
|
||
* @param bEnableClip 输入是否进行有效图像裁剪,true:输出点云实际对应的有效图像区域及映射点云;false:输出原始图像及映射点云;
|
||
* @param ppOutImage 输出处理后的图像(参考 bEnableClip 标志决定是否裁剪图像)
|
||
* @param pPointCnt 输出点云数据中的点个数
|
||
* @param ppMappedPointList 输出映射后与ppOutImage 相同分辨率的点云数据,点数据类型为eDataType
|
||
*/
|
||
VZNLAPI int VzNL_GetMappedLRImageAndPointCloud(VZNLHANDLE hDevice,
|
||
bool bIsRightImage,
|
||
SVzNLImageData* pImage,
|
||
EVzResultDataType eDataType,
|
||
unsigned int nLineCnt,
|
||
SVzLaserLineData* pLineDataList,
|
||
bool bEnableClip,
|
||
SVzNLImageData** ppOutImage,
|
||
unsigned int* pPointCnt,
|
||
void** ppMappedPointList);
|
||
|
||
/**
|
||
* @brief 释放VzNL_GetMappedRGBImageAndPointCloud()/VzNL_GetMappedLRImageAndPointCloud() 函数返回的图像和3D 点数据
|
||
*/
|
||
VZNLAPI int VzNL_ReleaseImageAndPointCloudMappedResult(SVzNLImageData** ppImage, void** ppPointList);
|
||
|
||
|
||
/**
|
||
* @brief USB 串口继电器设备搜索
|
||
* @param pDeviceNum 返回搜索到的设备个数
|
||
* @param ppDeviceInfoList 返回搜索到的设备名称列表
|
||
*/
|
||
VZNLAPI int VzNL_SearchUSBSerialRelay(unsigned int* pDeviceNum, SVzSerialPortInfo** ppDeviceInfoList);
|
||
|
||
/**
|
||
* @brief 获取指定USB 串口继电器设备的配置信息
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param pCfgPara 返回设备配置信息
|
||
*/
|
||
VZNLAPI int VzNL_GetUSBSerialRelayCfgPara(char* pDeviceName, SVzUSBSerialRelayCfgPara* pCfgPara);
|
||
|
||
/**
|
||
* @brief 查看指定USB 串口继电器设备是否打开
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
*/
|
||
VZNLAPI bool VzNL_IsUSBSerialRelayOpen(char* pDeviceName);
|
||
|
||
/**
|
||
* @brief 打开指定端口的USB 串口继电器设备,按配置参数打开指定设备
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param sCfgPara 输入设备配置信息
|
||
*/
|
||
VZNLAPI int VzNL_OpenUSBSerialRelay(char* pDeviceName, SVzUSBSerialRelayCfgPara sCfgPara);
|
||
|
||
/**
|
||
* @brief 关闭指定端口的USB 串口继电器设备
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
*/
|
||
VZNLAPI int VzNL_CloseUSBSerialRelay(char* pDeviceName);
|
||
|
||
/**
|
||
* @brief 获取所有打开的USB 串口继电器设备端口列表
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param ppDeviceInfoList 返回已打开设备的名称列表
|
||
*/
|
||
VZNLAPI int VzNL_GetOpenedUSBSerialRelayList(unsigned int* pDeviceNum, SVzSerialPortInfo** ppDeviceInfoList);
|
||
|
||
/**
|
||
* @brief 获取指定USB继电器通道当前开关状态
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param nChannelIdx 输入继电器通道索引
|
||
* @param pState 返回该通道当前开关状态
|
||
*/
|
||
VZNLAPI int VzNL_GetUSBSerialRelayChannelOnOffState(char* pDeviceName, unsigned int nChannelIdx, bool* pState);
|
||
|
||
/**
|
||
* @brief 打开/关闭指定继电器通道,pState 返回操作后该通道状态
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param bOn 输入需要设置的开关状态
|
||
* @param nChannelIdx 输入继电器通道索引
|
||
* @param pState 不为null时返回该通道当前开关状态
|
||
*/
|
||
VZNLAPI int VzNL_SetUSBSerialRelayChannelOnOff(char* pDeviceName, bool bOn, unsigned int nChannelIdx, bool* pState);
|
||
|
||
/**
|
||
* @brief 获取所有继电器通道开关状态:unsigned int* pState: 低位开始,每位代表一个通道;
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param pState 返回该通道当前开关状态
|
||
*/
|
||
VZNLAPI int VzNL_GetUSBSerialRelayAllChannelOnOffState(char* pDeviceName, unsigned int* pState);
|
||
|
||
/**
|
||
* @brief 打开/关闭所有继电器通道,pState 返回操作后所有继电器通道状态(低位开始,每位代表一个通道)
|
||
* @param pDeviceName 输入设备名称(搜索函数返回)
|
||
* @param bOn 输入需要设置的开关状态
|
||
* @param pState 不为null时返回所有通道当前开关状态
|
||
*/
|
||
VZNLAPI int VzNL_SetUSBSerialRelayAllChannelOnOff(char* pDeviceName, bool bOn, unsigned int* pState);
|
||
|
||
|
||
#endif |