/* * 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__