tea_cv_api.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. tea sorter
  3. */
  4. #pragma once
  5. #include "data_def_api.h"
  6. using namespace std;
  7. //定义TCV_DEBUG,每一步图像处理都会输出中间结果图片显示(opencv),回车后继续执行,用于测试
  8. // #define TCV_DEBUG
  9. // export
  10. #define TCV_EXPORTS
  11. #ifdef TCV_EXPORTS
  12. #define TCV_API __declspec(dllexport)
  13. #else
  14. #define TCV_API __declspec(dllimport)
  15. #endif
  16. #ifdef __cplusplus
  17. extern "C"
  18. {
  19. #endif
  20. namespace graft_cv
  21. {
  22. //1 设置log路径
  23. TCV_API int cv_set_logpath(char*lpath);
  24. //2 设置log等级
  25. TCV_API int cv_set_loglevel(int lev);// 0-debug, 1-info, 2-warning, 3-error
  26. //3 设置是否存储图片(存储路径在configure文件中),true--保存,false--不保存
  27. TCV_API int cv_init_image_saver();
  28. //4 初始化:本地配置文件初始化(yml)
  29. // 返回: 0- 正常; 1- 配置文件不存在
  30. TCV_API int cv_init(char*conf_file);
  31. //5 初始化:通过ConfigParam结构体对象直接赋值配置参数(内存)
  32. TCV_API void cv_set_param(ConfigParam&);
  33. TCV_API int cv_set_param_from_file(char*conf_file);
  34. //6 接口退出前的释放
  35. TCV_API int cv_release();
  36. //7 获取当前配置文件路径,输入char*要空间足够,内部没有检测是否越界
  37. TCV_API void cv_get_conf_file(char*);
  38. //8 保存到本地配置文件中(覆盖)
  39. TCV_API void cv_save_param(char* conf_file/*=0*/);
  40. //9 获取当前的配置参数
  41. TCV_API void cv_get_param(ConfigParam&);
  42. //10 获取当前版本号,char*要空间足够,内部没有检测是否越界
  43. TCV_API void get_version(char* buf);
  44. //11 找到抓取位置
  45. //
  46. // 输入:
  47. // ImgInfo------- 输入
  48. // posinfo ------- 输出
  49. // fn ------------ 输入, points指向0,且fn可用时,读取文件中的数据(用于测试),仅支持ply格式
  50. //
  51. //[0] tea_grab_x1; //第一株茶叶抓取位置x1,
  52. //[1] tea_grab_y1; //第一株茶叶抓取位置y1,
  53. //[2] tea_grab_angle1; //第一株茶叶抓取角度r1,
  54. //[3] tea_grab_x2; //第二株茶叶抓取位置x2,
  55. //[4] tea_grab_y2; //第二株茶叶抓取位置y2,
  56. //[5] tea_grab_angle2; //第二株茶叶抓取角度r2,
  57. //[6] tea_cut_x1; //第一株茶叶切割位置x1,
  58. //[7] tea_cut_y1; //第一株茶叶切割位置y1,
  59. //[8] tea_cut_angle1; //第一株茶叶切割角度r1,
  60. //[9] tea_cut_x2; //第二株茶叶切割位置x2,
  61. //[10] tea_cut_y2; //第二株茶叶切割位置y2,
  62. //[11] tea_cut_angle2; //第二株茶叶切割角度r2,
  63. // 如果为0,则不存在
  64. // posinfo.pp_images;
  65. //
  66. // 返回:
  67. // 0 - 正常,识别到目标;
  68. // 1 - 无算法结果(相机范围内有苗,但是算法没能识别到可以抓取的苗,告诉嵌入式需要抖动),
  69. // -1 - 拍照无苗(相机范围内无苗,告诉嵌入式需要上料)
  70. // 2 - 算法异常失败
  71. TCV_API int tea_grab_point(ImgInfo*, PositionInfo& posinfo, const char* fn=0);
  72. //12 找到切割位置
  73. //
  74. // 输入:
  75. // ImgInfo------- 输入
  76. // posinfo ------- 输出
  77. // fn ------------ 输入, points指向0,且fn可用时,读取文件中的数据(用于测试),仅支持ply格式
  78. //
  79. //[0] tea_grab_x1; //第一株茶叶抓取位置x1,
  80. //[1] tea_grab_y1; //第一株茶叶抓取位置y1,
  81. //[2] tea_grab_angle1; //第一株茶叶抓取角度r1,
  82. //[3] tea_grab_x2; //第二株茶叶抓取位置x2,
  83. //[4] tea_grab_y2; //第二株茶叶抓取位置y2,
  84. //[5] tea_grab_angle2; //第二株茶叶抓取角度r2,
  85. //[6] tea_cut_x1; //第一株茶叶切割位置x1,
  86. //[7] tea_cut_y1; //第一株茶叶切割位置y1,
  87. //[8] tea_cut_angle1; //第一株茶叶切割角度r1,
  88. //[9] tea_cut_x2; //第二株茶叶切割位置x2,
  89. //[10] tea_cut_y2; //第二株茶叶切割位置y2,
  90. //[11] tea_cut_angle2; //第二株茶叶切割角度r2,
  91. // 如果为0,则不存在
  92. // posinfo.pp_images;
  93. //
  94. // 返回: 0- 正常,识别到目标; 1- 算法异常失败 或 没有识别到目标
  95. TCV_API int tea_cut_point(ImgInfo*, PositionInfo& posinfo, const char* fn = 0);
  96. //13
  97. // 棋盘格角点识别
  98. TCV_API int chessboard_corners(
  99. ImgInfo*, //输入,图像数据
  100. PositionInfo& posinfo, //输出,结果数据,没有用
  101. int corner_row, //输入,棋盘格角点行数
  102. int corner_col, //输入,棋盘格角点列数
  103. int x0, //输入,棋盘格在图像中的左上x
  104. int y0, //输入,棋盘格在图像中的左上y
  105. int width, //输入,棋盘格在图像中的x方向宽度
  106. int height, //输入,棋盘格在图像中的y方向高度
  107. const char* fn = 0); //输入,棋盘格在图像文件,用于测试,默认不用
  108. };//namespace tea_cv
  109. #ifdef __cplusplus
  110. }
  111. #endif