GrabBag/SDK/VzNLSDK/Inc/VZNL_DetectCircle.h

205 lines
6.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Header: VZNL_DetectCircle.h
* Description:当前文件为伟景智能(Vizum)所研发的EyeCB板提供检测圆形的函数接口。
* Sample:
* VzNL_BeginDetectCircle();
* xxxxxxxxxxx
* VzNL_EndDetectCircle();
* Author: Mjw
* Date: 2018/08/28
*/
#ifndef __VIZUM_DETECTED_CIRCLE_HEADER__
#define __VIZUM_DETECTED_CIRCLE_HEADER__
#include "VZNL_Export.h"
#include "VZNL_Types.h"
/**
* @brief
* @param [out] p3DCircle 检测出的圆形3D结果
* @param [out] p2DCircle 检测出的圆形2D结果
* @param [out] nCount 结果个数
* @param [out] pLeftImage 左图
* @param [out] pRightImage 右图
* @param [out] pParam 传入参数
*/
typedef int(*VzNL_GetAutoDetectCircleResultCB)(SVzNL3DCircleObjectResult* p3DCircle, SVzNL2DCircleObjectResult* p2DCircle, unsigned int nCount, SVzNLImageData* pLeftImage, SVzNLImageData* pRightImage, void* pParam);
/**
* @brief 创建圆形检测工具
* @param [in] hDevice 设备句柄
* @return 返回0表示正确
*/
VZNLAPI int VzNL_BeginDetectCircle(VZNLHANDLE hDevice);
/**
* @brief 清空所有的圆
* @param [in] hDevice 设备句柄
* @return 返回0表示正确
*/
VZNLAPI int VzNL_ClearCircleDetectParam(VZNLHANDLE hDevice);
/**
* @brief 增加单圆检测
* @param [in] hDevice 设备句柄
* @param [in] nCircleR 圆的半径
* @return 返回0表示正确
*/
VZNLAPI int VzNL_AddCircleDetectParam(VZNLHANDLE hDevice, int nCircleR);
/**
* @brief 增加同心圆检测
* @param [in] hDevice 设备句柄
* @param [in] pnArrayCircleR 圆形半径array
* @param [in] nCircleNum 圆的个数arrray的个数
* @return 返回0表示正确
*/
VZNLAPI int VzNL_AddConcentricCircleDetectParam(VZNLHANDLE hDevice, int* pnArrayCircleR, int nCircleNum);
/**
* @brief 设置钢管检测参数
* @param [in] hDevice 设备句柄
* @param [in] nMinCircleR 最小圆的半径
* @return 返回0表示正确
*/
VZNLAPI int VzNL_SetSteelTubeDetectParam(VZNLHANDLE hDevice, int nMinCircleR);
/**
* @brief 移除检测参数
* @param [in] hDevice 设备句柄
* @param [in] nRemoveIdx 移除第几个参数
* @return 返回0表示正确
*/
VZNLAPI int VzNL_RemoveCircleDetectParam(VZNLHANDLE hDevice, unsigned int nRemoveIdx);
/**
* @brief 更新检测参数
* @param [in] hDevice 设备句柄
* @return 返回0表示正确
*/
VZNLAPI int VzNL_UpdateCircleDetectParam(VZNLHANDLE hDevice);
/**
* @brief 获取检测圆形参数的个数
* @name [in] hDevice 设备句柄
* @name [out] pnErrorCode 错误码 nullptr 时表示不获取
* @return 返回圆的个数
*/
VZNLAPI unsigned int VzNL_GetCircleDetectParamCount(VZNLHANDLE hDevice, int* pnErrorCode);
/**
* @brief 获取参数中圆的个数
* @name [in] hDevice 设备句柄
* @name [in] nIdx 获取第几个设备的圆的个数
* @name [out] pnErrorCode 错误码 nullptr 时表示不获取
* @return 返回圆的个数
*/
VZNLAPI int VzNL_GetCircleDetectParamCircleCount(VZNLHANDLE hDevice, unsigned int nIdx, int* pnErrorCode);
/**
* @brief 获取检测参数中圆的参数
* @name [in] hDevice 设备句柄
* @name [in] nIdx 获取第几个设备的圆的个数
* @name [out] peType 圆的类型
* @name [out] pnArrayCircleR 圆半径array
* @name [out] pnArrayMaxRDeviation 圆的误差array
* @name [out] nCircleNum 圆的个数
* @return 返回错误码0表示成功其他为失败请从错误数据中获取。
*/
VZNLAPI int VzNL_GetCircleDetectParam(VZNLHANDLE hDevice, unsigned int nIdx, EVzNL3DCircleType* peType, int* pnArrayCircleR, int* pnArrayMaxRDeviation, int nCircleNum);
/**
* @brief 设置输出检测结果参数
* @name [in] hDevice 设备句柄
* @name [in] dPointInterval 输出点间隔
* @name [in] bDoProjection 是否投影到平面
* @return 返回0表示正确
*/
VZNLAPI int VzNL_SetCircleDetectOutputParam(VZNLHANDLE hDevice, double dPointInterval, VzBool bDoProjection);
VZNLAPI int VzNL_GetCircleDetectOutputParam(VZNLHANDLE hDevice, double* pdPointInterval, VzBool* pbDoProjection);
VZNLAPI int VzNL_SetCircleThirdDetectParam(VZNLHANDLE hDevice, float fParam[3]);
VZNLAPI int VzNL_GetCircleThirdDetectParam(VZNLHANDLE hDevice, float fParam[3]);
/**
* @brief 检测圆形
* @param [in] hDevice 设备句柄
* @return 返回0表示正确
*/
VZNLAPI int VzNL_DetectCircle(VZNLHANDLE hDevice);
/**
* @brief 获取结果中圆形的个数
* @param [in] hDevice 设备句柄
* @return 返回圆形个数
*/
VZNLAPI int VzNL_GetCircleResultCount(VZNLHANDLE hDevice);
/**
* @brief 获取圆的2D结果
* @param [in] hDevice 设备句柄
* @param [out] pp2DCircle 2D圆SDK内部分配请调用VzNL_ReleaseCircle2DResult进行数据销毁
* @param [out] pnCount 传出2D圆的个数
* @return 成功返回0失败返回错误码。
*/
VZNLAPI int VzNL_GetCircle2DResult(VZNLHANDLE hDevice, SVzNL2DCircleObjectResult** pp2DCircle, int* pnCount);
/**
* @brief 释放2D结果
* @param [in] p2DCircle 2D圆结果
* @param [in] nCount 2D圆个数
* @return 成功返回0失败返回错误码。
*/
VZNLAPI void VzNL_ReleaseCircle2DResult(SVzNL2DCircleObjectResult* p2DCircle, int nCount);
/**
* @brief 获取圆的3D结果
* @param [in] hDevice 设备句柄
* @param [out] pp3DCircle 3D圆SDK内部分配请调用VzNL_ReleaseCircle3DResult进行数据销毁
* @param [out] pnCount 传出3D圆的个数
* @return 成功返回0失败返回错误码。
*/
VZNLAPI int VzNL_GetCircle3DResult(VZNLHANDLE hDevice, SVzNL3DCircleObjectResult** pp3DCircle, int* pnCount);
/**
* @brief 释放3D结果
* @param [in] p3DCircle 3D圆结果
* @param [in] nCount 3D圆个数
* @return 成功返回0失败返回错误码。
*/
VZNLAPI void VzNL_ReleaseCircle3DResult(SVzNL3DCircleObjectResult* p3DCircle, int nCount);
/**
* @brief 获取结果图像
* @param [in] hDevice 设备句柄
* @param [out] ppLeftImageData 左图数据 使用VzNL_ReleaseImageData 进行释放图像
* @param [out] ppRightImageData 右图数据 使用VzNL_ReleaseImageData 进行释放图像
* @return 成功返回0失败返回错误码。
*/
VZNLAPI int VzNL_GetCircleImageResult(VZNLHANDLE hDevice, SVzNLImageData** ppLeftImageData, SVzNLImageData** ppRightImageData);
/**
* @brief 开始自动检测圆形
* @param [in] hDevice 设备句柄
* @param [in] pCB 回调函数
* @param [in] pCBParam 回调参数
* @return 成功返回0失败返回错误码。
*/
VZNLAPI int VzNL_StartAutoDetectCircle(VZNLHANDLE hDevice, VzNL_GetAutoDetectCircleResultCB pCB, void* pCBParam);
/**
* @brief 结束自动检测圆形
* @param [in] hDevice 设备句柄
* @return 成功返回0失败返回错误码。
*/
VZNLAPI int VzNL_StopAutoDetectCircle(VZNLHANDLE hDevice);
/**
* @brief 销毁圆形检测工具
* @param [in] hDevice 设备句柄
*/
VZNLAPI int VzNL_EndDetectCircle(VZNLHANDLE hDevice);
#endif //__VIZUM_DETECTED_LINE_HEADER__