---@meta image.cv

--------------------------------------------------------------------------------
-- XXTouch image.cv OpenCV 模块
--------------------------------------------------------------------------------

---@alias image_cv_source image_cv_mat*|ImageObject*
---@alias image_cv_result image_cv_mat*|ImageObject*
---@alias image_cv_scalar number|number[]|{ b?: number, g?: number, r?: number, a?: number }
---@alias image_cv_point { x: number, y: number }|number[]
---@alias image_cv_size { width: number, height: number }|number[]
---@alias image_cv_rect { x: integer, y: integer, width: integer, height: integer }|{ left: integer, top: integer, right: integer, bottom: integer }|integer[]
---@alias image_cv_contours image_cv_contour[]
---@alias image_cv_color_code integer|string
---@alias image_cv_interpolation integer|string
---@alias image_cv_border_type integer|string
---@alias image_cv_threshold_type integer|string
---@alias image_cv_norm_type integer|string
---@alias image_cv_distance_type integer|string
---@alias image_cv_template_method integer|string
---@alias image_cv_hist_compare_method integer|string
---@alias image_cv_line_type integer|string
---@alias image_cv_hough_circle_method integer|string

---@class image_cv_binary_options*
---@field inplace? boolean 对 mat 输入原地处理
---@field return_image? boolean 返回 ImageObject* 而不是 cv mat

---@class image_cv_resize_options*: image_cv_binary_options*
---@field width? integer 输出宽
---@field height? integer 输出高
---@field fx? number 水平缩放比例
---@field fy? number 垂直缩放比例
---@field interpolation? image_cv_interpolation 插值方式

---@class image_cv_match_options*
---@field confidence_threshold? number 匹配阈值，范围 1..100
---@field find_all? boolean 是否返回所有匹配
---@field downscale? number 降采样比例，范围 0.1..1
---@field should_visualize? boolean 是否额外返回可视化图片
---@field mask? ImageObject* 与模板同尺寸的遮罩图片

---@class image_cv_match*
---@field x integer 左上角 X
---@field y integer 左上角 Y
---@field confidence number 置信度

---@class image_cv_stitch_long_options*
---@field auto_crop? boolean 自动估计顶部/底部固定区域
---@field top_crop? integer 顶部裁剪像素，-1 表示自动
---@field bottom_crop? integer 底部裁剪像素，-1 表示自动
---@field keep_first_top? boolean 是否保留首图顶部区域
---@field keep_last_bottom? boolean 是否保留末图底部区域
---@field overlay_mode? '"none"'|'"remove_all"'|'"keep_first"' 悬浮遮挡处理方式
---@field overlay_fill_mode? '"temporal_only"'|'"temporal_then_inpaint"' 遮挡回填方式
---@field overlay_regions? image_cv_rect[] 手动指定悬浮遮挡区域
---@field seam_blend_rows? integer 拼接缝混合行数
---@field min_overlap_ratio? number 相邻帧最小重叠比例
---@field max_overlap_ratio? number 相邻帧最大重叠比例
---@field template_height? integer 模板匹配高度，0 表示自动估计
---@field score_threshold? number 匹配分数阈值

---@class image_cv_find_polygon_options*
---@field min_sides? integer 最小边数
---@field max_sides? integer 最大边数，负数表示不限制
---@field min_side_length number 最短边长
---@field max_side_length number 最长边长
---@field min_area number 最小面积
---@field max_area number 最大面积
---@field blur_size? integer 模糊核尺寸
---@field canny_threshold1? number Canny 阈值 1
---@field canny_threshold2? number Canny 阈值 2
---@field approx_epsilon? number 多边形近似比例
---@field closed? boolean 是否按闭合轮廓处理
---@field should_visualize? boolean 是否额外返回可视化图片

---@class image_cv_compare_options*
---@field should_visualize? boolean 是否额外返回可视化图片
---@field approx_epsilon? number 差异轮廓近似比例

---@class image_cv_to_shapes_options*
---@field should_visualize? boolean 是否额外返回可视化图片
---@field closed? boolean 是否按闭合轮廓处理
---@field blur_size? integer 模糊核尺寸
---@field canny_threshold1? number Canny 阈值 1
---@field canny_threshold2? number Canny 阈值 2
---@field approx_epsilon? number 轮廓近似比例

---@class image_cv_find_shapes_options*: image_cv_to_shapes_options*
---@field min_area? number 最小面积
---@field max_area? number 最大面积
---@field diff_threshold? number 形状差异阈值
---@field shape_match_mode? integer OpenCV matchShapes 模式

---@class image_cv_detect_templates_options*
---@field [integer] ImageObject* 模板图片数组项
---@field should_visualize? boolean 是否额外返回可视化图片
---@field detector? 0|1|2 特征检测器，0=ORB，1=SIFT，2=SURF
---@field score_thresh? number 特征匹配分数阈值，范围 0..100

---@class image_cv_contour_attributes*
---@field diff_score? number 形状差异分数
---@field index? integer 模板索引
---@field angle? number 旋转角度
---@field confidence? number 置信度

---@class image_cv_contour*: image_cv_contour_attributes
---@field [integer] image_cv_point

---@class image_cv_rotated_rect*
---@field center image_cv_point 中心点
---@field size image_cv_size 尺寸
---@field angle number 旋转角度

---@class image_cv_contour_hierarchy*
---@field [1] integer next
---@field [2] integer prev
---@field [3] integer first_child
---@field [4] integer parent
---@field next integer 下一个轮廓索引
---@field prev integer 上一个轮廓索引
---@field first_child integer 第一个子轮廓索引
---@field parent integer 父轮廓索引

---@class image_cv_min_max_loc*
---@field min_val number 最小值
---@field max_val number 最大值
---@field min_loc image_cv_point 最小值坐标
---@field max_loc image_cv_point 最大值坐标

---@class image_cv_component*
---@field label integer 标签
---@field left integer 左边界
---@field top integer 上边界
---@field width integer 宽度
---@field height integer 高度
---@field area integer 面积
---@field centroid image_cv_point 质心

---@class image_cv_connected_components_result*
---@field count integer 连通域数量
---@field labels image_cv_mat* 标签矩阵
---@field stats image_cv_mat* 统计矩阵
---@field centroids image_cv_mat* 质心矩阵
---@field components image_cv_component[] 连通域列表

---@class image_cv_text_size*
---@field width integer 文字宽度
---@field height integer 文字高度
---@field baseline integer baseline

---@class image_cv_line_result*
---@field [1] number vx
---@field [2] number vy
---@field [3] number x
---@field [4] number y
---@field vx number 方向 X
---@field vy number 方向 Y
---@field x number 线上点 X
---@field y number 线上点 Y

---@class image_cv_circle_result*
---@field center image_cv_point 圆心
---@field radius number 半径

---@class image_cv_triangle_result*
---@field area number 面积
---@field triangle image_cv_point[] 三角形顶点

---@class image_cv_intersection_result*
---@field area number 面积
---@field contour image_cv_point[] 相交区域轮廓

---@class image_cv_moments*
---@field m00 number
---@field m10 number
---@field m01 number
---@field m20 number
---@field m11 number
---@field m02 number
---@field m30 number
---@field m21 number
---@field m12 number
---@field m03 number
---@field mu20 number
---@field mu11 number
---@field mu02 number
---@field mu30 number
---@field mu21 number
---@field mu12 number
---@field mu03 number
---@field nu20 number
---@field nu11 number
---@field nu02 number
---@field nu30 number
---@field nu21 number
---@field nu12 number
---@field nu03 number

---@class image_cv_hist_options*
---@field channel? integer 通道
---@field hist_size? integer 直方图尺寸
---@field ranges? number[] 取值范围 {min, max}
---@field uniform? boolean 是否均匀分布
---@field accumulate? boolean 是否累积
---@field mask? image_cv_source 遮罩

---@class image_cv_paddle_ocr_config*
---@field det_path? string 检测模型路径
---@field cls_path? string 方向分类模型路径
---@field rec_path? string 识别模型路径
---@field config_path? string OCR 配置路径
---@field dict_path? string 字典路径
---@field power_mode? string Paddle Lite power mode
---@field threads? integer 线程数
---@field downscale? number OCR 降采样比例
---@field should_visualize? boolean 是否额外返回可视化图片

---@class image_cv_paddle_ocr_item*
---@field text string 识别文本
---@field confidence number 置信度
---@field x integer 左上角 X
---@field y integer 左上角 Y
---@field w integer 宽
---@field h integer 高

---@class image_cv_paddle_ocr_context*
local paddle_ocr_context = {}

--- 销毁 OCR 上下文。
function paddle_ocr_context:destroy() end

--- 对图片执行 OCR。
---@param image ImageObject* 图片
---@param opts? image_cv_paddle_ocr_config 选项
---@return image_cv_paddle_ocr_item[]? results 识别结果
---@return ImageObject*? visual 可视化图片
function paddle_ocr_context:predict(image, opts) end

---@class image_cv_paddle_yolov3_options*
---@field model_path? string 模型路径
---@field param_path? string 参数路径
---@field label_path? string 标签路径
---@field power_mode? string Paddle Lite power mode
---@field threads? integer 线程数
---@field score_threshold? number 分数阈值
---@field should_visualize? boolean 是否额外返回可视化图片
---@field mean? number[] 预处理 mean
---@field std? number[] 预处理 std

---@class image_cv_paddle_yolov3_result*
---@field class_name string 类名
---@field x integer 左上角 X
---@field y integer 左上角 Y
---@field w integer 宽
---@field h integer 高
---@field confidence number 置信度

---@class image_cv_paddle_yolov3_context*
local paddle_yolov3_context = {}

--- 销毁 YOLOv3 上下文。
function paddle_yolov3_context:destroy() end

--- 对图片执行目标检测。
---@param image ImageObject* 图片
---@param opts? image_cv_paddle_yolov3_options 选项
---@return image_cv_paddle_yolov3_result[] results 检测结果
---@return ImageObject*? visual 可视化图片
function paddle_yolov3_context:predict(image, opts) end

---@class image_cv_mat*
local mat = {}

--- 获取 cv mat 类型名。
---@return string type 类型名
function mat:type() end

--- 获取 mat 深度。
---@return integer depth 深度
function mat:depth() end

--- 获取通道数。
---@return integer channels 通道数
function mat:channels() end

--- 获取尺寸。
---@return integer width 宽
---@return integer height 高
function mat:size() end

--- 获取矩阵形状。
---@return table shape 形状信息
function mat:shape() end

--- 克隆 mat。
---@return image_cv_mat* mat mat 副本
function mat:clone() end

--- 转为图片对象。
---@return ImageObject* image 图片对象
function mat:to_image() end

--- 转换 mat 数据类型。
---@param dtype integer|string 目标类型
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 转换结果
function mat:astype(dtype, opts) end

--- 颜色空间转换。
---@param code image_cv_color_code 转换代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 转换结果
function mat:cvt_color(code, opts) end

--- 分离通道。
---@return image_cv_mat[] channels 通道 mat 数组
function mat:split() end

--- 提取指定通道。
---@param channel integer 通道索引，从 0 开始
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 单通道结果
function mat:extract_channel(channel, opts) end

--- 插入单通道数据到目标通道。
---@param dst image_cv_source 目标
---@param channel integer 通道索引，从 0 开始
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:insert_channel(dst, channel, opts) end

--- 旋转。
---@param rotate_code integer|string 旋转代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:rotate(rotate_code, opts) end

--- 翻转。
---@param flip_code integer|string 翻转代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:flip(flip_code, opts) end

--- 转置。
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:transpose(opts) end

--- 透视变换。
---@param matrix image_cv_source 3x3 变换矩阵
---@param width integer 输出宽
---@param height integer 输出高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:warp_perspective(matrix, width, height, opts) end

--- 仿射变换。
---@param matrix image_cv_source 2x3 变换矩阵
---@param width integer 输出宽
---@param height integer 输出高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:warp_affine(matrix, width, height, opts) end

--- 调整尺寸。
---@param width? integer 输出宽
---@param height? integer 输出高
---@param interpolation_or_opts? image_cv_interpolation|image_cv_resize_options 插值方式或选项
---@param opts? image_cv_resize_options 选项
---@return image_cv_result result 处理结果
function mat:resize(width, height, interpolation_or_opts, opts) end

--- 重复矩阵。
---@param self image_cv_mat* 当前 mat
---@param ny integer 纵向重复次数
---@param nx integer 横向重复次数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
mat["repeat"] = function(self, ny, nx, opts) end

--- 下采样。
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:pyr_down(opts) end

--- 上采样。
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:pyr_up(opts) end

--- 截取亚像素矩形。
---@param width integer 宽
---@param height integer 高
---@param center image_cv_point 中心点
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:get_rect_sub_pix(width, height, center, opts) end

--- 添加边框。
---@param top integer 上边框
---@param bottom integer 下边框
---@param left integer 左边框
---@param right integer 右边框
---@param border_type? image_cv_border_type 边框类型
---@param value? image_cv_scalar 填充值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:copy_make_border(top, bottom, left, right, border_type, value, opts) end

--- 绝对差。
---@param rhs image_cv_source 右值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:absdiff(rhs, opts) end

--- 加法。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:add(rhs, opts) end

--- 减法。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:subtract(rhs, opts) end

--- 乘法。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param scale? number 缩放
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:multiply(rhs, scale, opts) end

--- 除法。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param scale? number 缩放
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:divide(rhs, scale, opts) end

--- 比较。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param cmp_op integer|string 比较操作
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:compare(rhs, cmp_op, opts) end

--- 归约。
---@param dim integer 维度
---@param op integer|string 操作
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:reduce(dim, op, opts) end

--- 求和。
---@return image_cv_scalar scalar 求和结果
function mat:sum() end

--- 计算范数。
---@param rhs_or_norm_type? image_cv_source|image_cv_norm_type 右值或范数类型
---@param norm_type_or_mask? image_cv_norm_type|image_cv_source 范数类型或遮罩
---@param mask? image_cv_source 遮罩
---@return number norm 范数
function mat:norm(rhs_or_norm_type, norm_type_or_mask, mask) end

--- 复制到新 mat，可指定遮罩。
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:copy_to(mask_or_opts, opts) end

--- 设置像素值。
---@param value image_cv_scalar 值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:set_to(value, mask_or_opts, opts) end

--- 固定阈值二值化。
---@param thresh number 阈值
---@param maxval number 最大值
---@param type? image_cv_threshold_type 阈值类型
---@param opts? image_cv_binary_options|{ inplace?: boolean, return_image?: boolean, return_threshold?: boolean } 选项
---@return image_cv_result result 处理结果
---@return number? used_threshold 实际阈值
function mat:threshold(thresh, maxval, type, opts) end

--- 自适应阈值二值化。
---@param maxval number 最大值
---@param method integer|string 自适应方法
---@param type image_cv_threshold_type 阈值类型
---@param block_size integer 块大小
---@param c number 常量
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:adaptive_threshold(maxval, method, type, block_size, c, opts) end

--- 均值模糊。
---@param ksize integer 核尺寸
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:blur(ksize, opts) end

--- 高斯模糊。
---@param kx integer 横向核尺寸
---@param ky integer 纵向核尺寸
---@param sigma_x? number sigma X
---@param sigma_y? number sigma Y
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:gaussian_blur(kx, ky, sigma_x, sigma_y, opts) end

--- 中值模糊。
---@param ksize integer 核尺寸
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:median_blur(ksize, opts) end

--- 双边滤波。
---@param d integer 邻域直径
---@param sigma_color number 颜色 sigma
---@param sigma_space number 空间 sigma
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:bilateral_filter(d, sigma_color, sigma_space, opts) end

--- 直方图均衡化。
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:equalize_hist(opts) end

--- CLAHE 自适应直方图均衡化。
---@param clip_limit_or_opts? number|image_cv_binary_options clip limit 或选项
---@param tile_width? integer tile 宽
---@param tile_height? integer tile 高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:clahe(clip_limit_or_opts, tile_width, tile_height, opts) end

--- 归一化。
---@param opts? image_cv_binary_options|{ alpha?: number, beta?: number, norm_type?: image_cv_norm_type, inplace?: boolean, return_image?: boolean } 选项
---@return image_cv_result result 处理结果
function mat:normalize(opts) end

--- 平均值。
---@param mask? image_cv_source 遮罩
---@return image_cv_scalar scalar 平均值
function mat:mean(mask) end

--- 平均值和标准差。
---@param mask? image_cv_source 遮罩
---@return image_cv_scalar mean 平均值
---@return image_cv_scalar stddev 标准差
function mat:mean_std_dev(mask) end

--- 统计非零元素数量。
---@return integer count 非零数量
function mat:count_non_zero() end

--- 范围检测。
---@param lower image_cv_scalar 下界
---@param upper image_cv_scalar 上界
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:in_range(lower, upper, opts) end

--- 加权混合。
---@param alpha number self 权重
---@param src2 image_cv_source 第二张图
---@param beta number 第二张图权重
---@param gamma? number 偏移
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:add_weighted(alpha, src2, beta, gamma, opts) end

--- 按位与。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:bitwise_and(rhs, mask_or_opts, opts) end

--- 按位或。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:bitwise_or(rhs, mask_or_opts, opts) end

--- 按位异或。
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:bitwise_xor(rhs, mask_or_opts, opts) end

--- 按位取反。
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:bitwise_not(mask_or_opts, opts) end

--- Canny 边缘检测。
---@param threshold1 number 阈值 1
---@param threshold2 number 阈值 2
---@param aperture_size? integer aperture size
---@param l2gradient? boolean 是否使用 L2 gradient
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:canny(threshold1, threshold2, aperture_size, l2gradient, opts) end

--- Sobel 算子。
---@param ddepth integer|string 输出深度
---@param dx integer X 阶数
---@param dy integer Y 阶数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:sobel(ddepth, dx, dy, opts) end

--- Scharr 算子。
---@param ddepth integer|string 输出深度
---@param dx integer X 阶数
---@param dy integer Y 阶数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:scharr(ddepth, dx, dy, opts) end

--- Laplacian 算子。
---@param ddepth integer|string 输出深度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:laplacian(ddepth, opts) end

--- 缩放并取绝对值。
---@param alpha? number 缩放
---@param beta? number 偏移
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:convert_scale_abs(alpha, beta, opts) end

--- 腐蚀。
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:erode(kernel, opts) end

--- 膨胀。
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:dilate(kernel, opts) end

--- 形态学运算。
---@param op integer|string 操作
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:morphology_ex(op, kernel, opts) end

--- 重映射。
---@param map1 image_cv_source map1
---@param map2 image_cv_source map2
---@param interpolation? image_cv_interpolation 插值方式
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:remap(map1, map2, interpolation, opts) end

--- 漫水填充。
---@param seed_point image_cv_point 种子点
---@param new_val image_cv_scalar 填充值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:flood_fill(seed_point, new_val, opts) end

--- 相位相关。
---@param rhs image_cv_source 右值
---@param window? image_cv_source 窗口
---@return image_cv_point shift 偏移
---@return number response 响应
function mat:phase_correlate(rhs, window) end

--- 计算幅值。
---@param y image_cv_source y 分量
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 幅值
function mat:magnitude(y, opts) end

--- 计算相位。
---@param y image_cv_source y 分量
---@param angle_in_degrees? boolean 是否返回角度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 相位
function mat:phase(y, angle_in_degrees, opts) end

--- 笛卡尔坐标转极坐标。
---@param y image_cv_source y 分量
---@param angle_in_degrees? boolean 是否返回角度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result magnitude 幅值
---@return image_cv_result angle 角度
function mat:cart_to_polar(y, angle_in_degrees, opts) end

--- 极坐标转笛卡尔坐标。
---@param angle image_cv_source 角度
---@param angle_in_degrees? boolean 角度单位
---@param opts? image_cv_binary_options 选项
---@return image_cv_result x x 分量
---@return image_cv_result y y 分量
function mat:polar_to_cart(angle, angle_in_degrees, opts) end

--- 查找轮廓。
---@param mode? integer|string 检索模式
---@param method? integer|string 近似方法
---@param opts? { return_hierarchy?: boolean } 选项
---@return image_cv_contour[] contours 轮廓数组
---@return image_cv_contour_hierarchy[]? hierarchy 层级关系
function mat:find_contours(mode, method, opts) end

--- 连通域分析。
---@param connectivity? 4|8 连通性
---@param ltype? integer|string 标签类型
---@return image_cv_connected_components_result result 连通域结果
function mat:connected_components_with_stats(connectivity, ltype) end

--- 查找非零点。
---@return image_cv_point[] points 非零点
function mat:find_non_zero() end

--- 计算矩。
---@param binary_image? boolean 是否按二值图处理
---@return image_cv_moments moments 矩
function mat:moments(binary_image) end

--- 计算 Hu 矩。
---@param binary_image? boolean 是否按二值图处理
---@return number[] hu_moments Hu 矩数组
function mat:hu_moments(binary_image) end

--- 模板匹配。
---@param templ image_cv_source 模板
---@param method? image_cv_template_method 匹配方法
---@param mask? image_cv_source 遮罩
---@return image_cv_mat* result 匹配结果矩阵
function mat:match_template(templ, method, mask) end

--- 取最小最大值及位置。
---@param mask? image_cv_source 遮罩
---@return image_cv_min_max_loc result 结果
function mat:min_max_loc(mask) end

--- 计算直方图。
---@param opts? image_cv_hist_options 选项
---@return image_cv_mat* hist 直方图
function mat:calc_hist(opts) end

--- 比较直方图。
---@param hist2 image_cv_source 直方图
---@param method? image_cv_hist_compare_method 比较方式
---@return number score 分数
function mat:compare_hist(hist2, method) end

--- 概率霍夫直线检测。
---@param rho number rho
---@param theta number theta
---@param threshold integer 阈值
---@param min_line_length? number 最小线段长度
---@param max_line_gap? number 最大线段间隙
---@return table[] lines 线段列表
function mat:hough_lines_p(rho, theta, threshold, min_line_length, max_line_gap) end

--- 霍夫圆检测。
---@param method image_cv_hough_circle_method 检测方法
---@param dp number 累加器分辨率比例
---@param min_dist number 圆心最小距离
---@param param1? number 参数 1
---@param param2? number 参数 2
---@param min_radius? integer 最小半径
---@param max_radius? integer 最大半径
---@return table[] circles 圆列表
function mat:hough_circles(method, dp, min_dist, param1, param2, min_radius, max_radius) end

--- 距离变换。
---@param distance_type? image_cv_distance_type 距离类型
---@param mask_size? integer mask size
---@param opts? image_cv_binary_options|{ dst_type?: integer|string, return_image?: boolean } 选项
---@return image_cv_result result 距离图
function mat:distance_transform(distance_type, mask_size, opts) end

--- 角点检测。
---@param max_corners integer 最大角点数
---@param quality_level number 质量阈值
---@param min_distance number 最小距离
---@param mask_or_block_size? image_cv_source|integer 遮罩或 block size
---@param use_harris? boolean 是否使用 Harris
---@param k? number Harris 参数
---@return image_cv_point[] corners 角点
function mat:good_features_to_track(max_corners, quality_level, min_distance, mask_or_block_size, use_harris, k) end

--- 绘制矩形。
---@param x1 integer 左上角 X
---@param y1 integer 左上角 Y
---@param x2 integer 右下角 X
---@param y2 integer 右下角 Y
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:rectangle(x1, y1, x2, y2, color, thickness, opts) end

--- 绘制圆。
---@param x integer 圆心 X
---@param y integer 圆心 Y
---@param radius integer 半径
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:circle(x, y, radius, color, thickness, opts) end

--- 绘制线段。
---@param x1 integer 起点 X
---@param y1 integer 起点 Y
---@param x2 integer 终点 X
---@param y2 integer 终点 Y
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:line(x1, y1, x2, y2, color, thickness, opts) end

--- 绘制折线。
---@param points image_cv_contours 点集
---@param is_closed boolean 是否闭合
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param line_type? image_cv_line_type 线型
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:polylines(points, is_closed, color, thickness, line_type, opts) end

--- 填充多边形。
---@param points image_cv_contours 点集
---@param color image_cv_scalar 颜色
---@param line_type? image_cv_line_type 线型
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:fill_poly(points, color, line_type, opts) end

--- 绘制轮廓。
---@param contours image_cv_contours 轮廓数组
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:draw_contours(contours, color, thickness, opts) end

--- 绘制文字。
---@param text string 文本
---@param org image_cv_point 原点
---@param font_face integer|string 字体
---@param font_scale number 字体缩放
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param line_type? image_cv_line_type 线型
---@param bottom_left_origin? boolean 是否以左下为原点
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function mat:put_text(text, org, font_face, font_scale, color, thickness, line_type, bottom_left_origin, opts) end

---@class ImageObject*
local ImageObject = {}

--- 将图片转成 cv mat。
---@return image_cv_mat* mat cv mat
function ImageObject:cv_to_mat() end

--- 在图片中查找模板图。
---@param template ImageObject* 模板图片
---@param opts? image_cv_match_options 选项
---@return integer|image_cv_match[] x_or_matches X 坐标或匹配数组
---@return integer|ImageObject*|nil y_or_visual Y 坐标或可视化图片
---@return number? confidence 置信度
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_find_image(template, opts) end

--- 二值化并替换当前图片。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function ImageObject:cv_binaryzation(threshold) end

--- 二值化并返回副本。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function ImageObject:cv_binaryzation_copy(threshold) end

--- 二值化并替换当前图片。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function ImageObject:cv_binarization(threshold) end

--- 二值化并返回副本。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function ImageObject:cv_binarization_copy(threshold) end

--- 二值化并替换当前图片。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function ImageObject:cv_binarize(threshold) end

--- 二值化并返回副本。
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function ImageObject:cv_binarize_copy(threshold) end

--- 调整图片尺寸并替换当前图片。
---@param width integer 输出宽
---@param height integer 输出高
---@return ImageObject* image 当前图片
function ImageObject:cv_resize(width, height) end

--- 调整图片尺寸并返回副本。
---@param width integer 输出宽
---@param height integer 输出高
---@return ImageObject* image 新图片
function ImageObject:cv_resize_copy(width, height) end

--- 查找多边形。
---@param opts image_cv_find_polygon_options 选项
---@return image_cv_contour[] contours 轮廓数组
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_find_polygon(opts) end

--- 对比两张同尺寸图片的差异。
---@param image ImageObject* 对比图片
---@param opts? image_cv_compare_options 选项
---@return image_cv_contour[] contours 差异轮廓
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_compare_image(image, opts) end

--- 查找与模板形状相似的轮廓。
---@param shape ImageObject*|image_cv_contours 模板图片或模板轮廓
---@param opts? image_cv_find_shapes_options 选项
---@return image_cv_contour[][] groups 每个模板对应的匹配轮廓
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_find_shapes(shape, opts) end

--- 提取图片轮廓。
---@param opts? image_cv_to_shapes_options 选项
---@return image_cv_contour[] contours 轮廓数组
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_to_shapes(opts) end

--- 基于特征检测多个模板。
---@param opts image_cv_detect_templates_options 模板数组及选项
---@return image_cv_contour[] contours 检测到的模板轮廓
---@return ImageObject*? visual 可视化图片
function ImageObject:cv_detect_templates(opts) end

--- 对图片执行 OCR。
---@param opts? image_cv_paddle_ocr_config 选项
---@return image_cv_paddle_ocr_item[]? results 识别结果
---@return ImageObject*? visual 可视化图片
function ImageObject:paddle_ocr(opts) end

---@class image_cv_mat_namespace*
---@field is fun(value: any): boolean

---@class image_cv*
---@field _AUTHOR string 作者
---@field _VERSION string 模块版本
---@field _CV_VERSION string OpenCV 版本
---@field mat image_cv_mat_namespace* mat 工具表
---@type image_cv*
local M = {}

M._AUTHOR = "XXTouch"
M._VERSION = "1.4.3"
M._CV_VERSION = ""
M.mat = {}

--- 判断一个值是否为 cv mat。
---@param value any 待判断值
---@return boolean ok 是否为 cv mat
function M.mat.is(value) end

--- 判断一个值是否为 cv mat。
---@param value any 待判断值
---@return boolean ok 是否为 cv mat
function M.is(value) end

--- 获取 cv 对象类型。
---@param value any 待判断值
---@return string? type 类型名
function M.type(value) end

--- 获取 image.cv 模块版本。
---@return string version 版本
function M.version() end

--- 从图片创建 cv mat。
---@param image ImageObject* 图片
---@return image_cv_mat* mat cv mat
function M.from_image(image) end

--- 将 cv mat 转成图片。
---@param source image_cv_source cv mat 或图片
---@return ImageObject* image 图片
function M.to_image(source) end

--- 颜色空间转换。
---@param source image_cv_source 输入
---@param code image_cv_color_code 转换代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 转换结果
function M.cvt_color(source, code, opts) end

--- 分离通道。
---@param source image_cv_source 输入
---@return image_cv_mat[] channels 通道 mat 数组
function M.split(source) end

--- 合并通道。
---@param channels image_cv_source[] 通道列表
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 合并结果
function M.merge(channels, opts) end

--- 横向拼接。
---@param sources image_cv_source[] 输入列表
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 拼接结果
function M.hconcat(sources, opts) end

--- 纵向拼接。
---@param sources image_cv_source[] 输入列表
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 拼接结果
function M.vconcat(sources, opts) end

--- 提取指定通道。
---@param source image_cv_source 输入
---@param channel integer 通道索引，从 0 开始
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 单通道结果
function M.extract_channel(source, channel, opts) end

--- 插入单通道数据到目标通道。
---@param source image_cv_source 单通道输入
---@param dst image_cv_source 目标
---@param channel integer 通道索引，从 0 开始
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.insert_channel(source, dst, channel, opts) end

--- 旋转。
---@param source image_cv_source 输入
---@param rotate_code integer|string 旋转代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.rotate(source, rotate_code, opts) end

--- 翻转。
---@param source image_cv_source 输入
---@param flip_code integer|string 翻转代码
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.flip(source, flip_code, opts) end

--- 转置。
---@param source image_cv_source 输入
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.transpose(source, opts) end

--- 获取透视变换矩阵。
---@param src_points image_cv_point[] 源点，4 个点
---@param dst_points image_cv_point[] 目标点，4 个点
---@return image_cv_mat* matrix 变换矩阵
function M.get_perspective_transform(src_points, dst_points) end

--- 对点集做透视变换。
---@param points image_cv_point[] 点集
---@param matrix image_cv_source 3x3 变换矩阵
---@return image_cv_point[] points 变换后的点集
function M.perspective_transform(points, matrix) end

--- 透视变换图片或 mat。
---@param source image_cv_source 输入
---@param matrix image_cv_source 3x3 变换矩阵
---@param width integer 输出宽
---@param height integer 输出高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.warp_perspective(source, matrix, width, height, opts) end

--- 获取仿射变换矩阵。
---@param src_points image_cv_point[] 源点，3 个点
---@param dst_points image_cv_point[] 目标点，3 个点
---@return image_cv_mat* matrix 变换矩阵
function M.get_affine_transform(src_points, dst_points) end

--- 对点集做仿射变换。
---@param points image_cv_point[] 点集
---@param matrix image_cv_source 2x3 变换矩阵
---@return image_cv_point[] points 变换后的点集
function M.transform(points, matrix) end

--- 仿射变换图片或 mat。
---@param source image_cv_source 输入
---@param matrix image_cv_source 2x3 变换矩阵
---@param width integer 输出宽
---@param height integer 输出高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.warp_affine(source, matrix, width, height, opts) end

--- 调整尺寸。
---@param source image_cv_source 输入
---@param width? integer 输出宽
---@param height? integer 输出高
---@param interpolation_or_opts? image_cv_interpolation|image_cv_resize_options 插值方式或选项
---@param opts? image_cv_resize_options 选项
---@return image_cv_result result 处理结果
function M.resize(source, width, height, interpolation_or_opts, opts) end

--- 重复矩阵。
---@param source image_cv_source 输入
---@param ny integer 纵向重复次数
---@param nx integer 横向重复次数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
M["repeat"] = function(source, ny, nx, opts) end

--- 下采样。
---@param source image_cv_source 输入
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.pyr_down(source, opts) end

--- 上采样。
---@param source image_cv_source 输入
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.pyr_up(source, opts) end

--- 截取亚像素矩形。
---@param source image_cv_source 输入
---@param width integer 宽
---@param height integer 高
---@param center image_cv_point 中心点
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.get_rect_sub_pix(source, width, height, center, opts) end

--- 添加边框。
---@param source image_cv_source 输入
---@param top integer 上边框
---@param bottom integer 下边框
---@param left integer 左边框
---@param right integer 右边框
---@param border_type? image_cv_border_type 边框类型
---@param value? image_cv_scalar 填充值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.copy_make_border(source, top, bottom, left, right, border_type, value, opts) end

--- 绝对差。
---@param src1 image_cv_source 输入 1
---@param src2 image_cv_source 输入 2
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.absdiff(src1, src2, opts) end

--- 加法。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.add(src1, rhs, opts) end

--- 减法。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.subtract(src1, rhs, opts) end

--- 乘法。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param scale? number 缩放
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.multiply(src1, rhs, scale, opts) end

--- 除法。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param scale? number 缩放
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.divide(src1, rhs, scale, opts) end

--- 比较。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param cmp_op integer|string 比较操作
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.compare(src1, rhs, cmp_op, opts) end

--- 归约。
---@param source image_cv_source 输入
---@param dim integer 维度
---@param op integer|string 操作
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.reduce(source, dim, op, opts) end

--- 求和。
---@param source image_cv_source 输入
---@return image_cv_scalar scalar 求和结果
function M.sum(source) end

--- 计算范数。
---@param src1 image_cv_source 输入 1
---@param rhs_or_norm_type? image_cv_source|image_cv_norm_type 右值或范数类型
---@param norm_type_or_mask? image_cv_norm_type|image_cv_source 范数类型或遮罩
---@param mask? image_cv_source 遮罩
---@return number norm 范数
function M.norm(src1, rhs_or_norm_type, norm_type_or_mask, mask) end

--- 复制到新 mat，可指定遮罩。
---@param source image_cv_source 输入
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.copy_to(source, mask_or_opts, opts) end

--- 设置像素值。
---@param source image_cv_source 输入
---@param value image_cv_scalar 值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.set_to(source, value, mask_or_opts, opts) end

--- 固定阈值二值化。
---@param source image_cv_source 输入
---@param thresh number 阈值
---@param maxval number 最大值
---@param type? image_cv_threshold_type 阈值类型
---@param opts? image_cv_binary_options|{ inplace?: boolean, return_image?: boolean, return_threshold?: boolean } 选项
---@return image_cv_result result 处理结果
---@return number? used_threshold 实际阈值
function M.threshold(source, thresh, maxval, type, opts) end

--- 自适应阈值二值化。
---@param source image_cv_source 输入
---@param maxval number 最大值
---@param method integer|string 自适应方法
---@param type image_cv_threshold_type 阈值类型
---@param block_size integer 块大小
---@param c number 常量
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.adaptive_threshold(source, maxval, method, type, block_size, c, opts) end

--- 均值模糊。
---@param source image_cv_source 输入
---@param ksize integer 核尺寸
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.blur(source, ksize, opts) end

--- 高斯模糊。
---@param source image_cv_source 输入
---@param kx integer 横向核尺寸
---@param ky integer 纵向核尺寸
---@param sigma_x? number sigma X
---@param sigma_y? number sigma Y
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.gaussian_blur(source, kx, ky, sigma_x, sigma_y, opts) end

--- 中值模糊。
---@param source image_cv_source 输入
---@param ksize integer 核尺寸
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.median_blur(source, ksize, opts) end

--- 双边滤波。
---@param source image_cv_source 输入
---@param d integer 邻域直径
---@param sigma_color number 颜色 sigma
---@param sigma_space number 空间 sigma
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.bilateral_filter(source, d, sigma_color, sigma_space, opts) end

--- 直方图均衡化。
---@param source image_cv_source 输入
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.equalize_hist(source, opts) end

--- CLAHE 自适应直方图均衡化。
---@param source image_cv_source 输入
---@param clip_limit_or_opts? number|image_cv_binary_options clip limit 或选项
---@param tile_width? integer tile 宽
---@param tile_height? integer tile 高
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.clahe(source, clip_limit_or_opts, tile_width, tile_height, opts) end

--- 归一化。
---@param source image_cv_source 输入
---@param opts? image_cv_binary_options|{ alpha?: number, beta?: number, norm_type?: image_cv_norm_type, inplace?: boolean, return_image?: boolean } 选项
---@return image_cv_result result 处理结果
function M.normalize(source, opts) end

--- 平均值。
---@param source image_cv_source 输入
---@param mask? image_cv_source 遮罩
---@return image_cv_scalar scalar 平均值
function M.mean(source, mask) end

--- 平均值和标准差。
---@param source image_cv_source 输入
---@param mask? image_cv_source 遮罩
---@return image_cv_scalar mean 平均值
---@return image_cv_scalar stddev 标准差
function M.mean_std_dev(source, mask) end

--- 统计非零元素数量。
---@param source image_cv_source 输入
---@return integer count 非零数量
function M.count_non_zero(source) end

--- 范围检测。
---@param source image_cv_source 输入
---@param lower image_cv_scalar 下界
---@param upper image_cv_scalar 上界
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.in_range(source, lower, upper, opts) end

--- 加权混合。
---@param src1 image_cv_source 输入 1
---@param alpha number src1 权重
---@param src2 image_cv_source 输入 2
---@param beta number src2 权重
---@param gamma? number 偏移
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.add_weighted(src1, alpha, src2, beta, gamma, opts) end

--- 按位与。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.bitwise_and(src1, rhs, mask_or_opts, opts) end

--- 按位或。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.bitwise_or(src1, rhs, mask_or_opts, opts) end

--- 按位异或。
---@param src1 image_cv_source 输入 1
---@param rhs image_cv_source|image_cv_scalar 右值
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.bitwise_xor(src1, rhs, mask_or_opts, opts) end

--- 按位取反。
---@param source image_cv_source 输入
---@param mask_or_opts? image_cv_source|image_cv_binary_options 遮罩或选项
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.bitwise_not(source, mask_or_opts, opts) end

--- Canny 边缘检测。
---@param source image_cv_source 输入
---@param threshold1 number 阈值 1
---@param threshold2 number 阈值 2
---@param aperture_size? integer aperture size
---@param l2gradient? boolean 是否使用 L2 gradient
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.canny(source, threshold1, threshold2, aperture_size, l2gradient, opts) end

--- Sobel 算子。
---@param source image_cv_source 输入
---@param ddepth integer|string 输出深度
---@param dx integer X 阶数
---@param dy integer Y 阶数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.sobel(source, ddepth, dx, dy, opts) end

--- Scharr 算子。
---@param source image_cv_source 输入
---@param ddepth integer|string 输出深度
---@param dx integer X 阶数
---@param dy integer Y 阶数
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.scharr(source, ddepth, dx, dy, opts) end

--- Laplacian 算子。
---@param source image_cv_source 输入
---@param ddepth integer|string 输出深度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.laplacian(source, ddepth, opts) end

--- 缩放并取绝对值。
---@param source image_cv_source 输入
---@param alpha? number 缩放
---@param beta? number 偏移
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.convert_scale_abs(source, alpha, beta, opts) end

--- 获取结构元素。
---@param shape integer|string 形状
---@param width integer 宽
---@param height integer 高
---@param anchor? image_cv_point 锚点
---@return image_cv_mat* kernel 结构元素
function M.get_structuring_element(shape, width, height, anchor) end

--- 腐蚀。
---@param source image_cv_source 输入
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.erode(source, kernel, opts) end

--- 膨胀。
---@param source image_cv_source 输入
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.dilate(source, kernel, opts) end

--- 形态学运算。
---@param source image_cv_source 输入
---@param op integer|string 操作
---@param kernel image_cv_source 结构元素
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.morphology_ex(source, op, kernel, opts) end

--- 重映射。
---@param source image_cv_source 输入
---@param map1 image_cv_source map1
---@param map2 image_cv_source map2
---@param interpolation? image_cv_interpolation 插值方式
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.remap(source, map1, map2, interpolation, opts) end

--- 漫水填充。
---@param source image_cv_source 输入
---@param seed_point image_cv_point 种子点
---@param new_val image_cv_scalar 填充值
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.flood_fill(source, seed_point, new_val, opts) end

--- 相位相关。
---@param src1 image_cv_source 输入 1
---@param src2 image_cv_source 输入 2
---@param window? image_cv_source 窗口
---@return image_cv_point shift 偏移
---@return number response 响应
function M.phase_correlate(src1, src2, window) end

--- 计算幅值。
---@param x image_cv_source x 分量
---@param y image_cv_source y 分量
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 幅值
function M.magnitude(x, y, opts) end

--- 计算相位。
---@param x image_cv_source x 分量
---@param y image_cv_source y 分量
---@param angle_in_degrees? boolean 是否返回角度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 相位
function M.phase(x, y, angle_in_degrees, opts) end

--- 笛卡尔坐标转极坐标。
---@param x image_cv_source x 分量
---@param y image_cv_source y 分量
---@param angle_in_degrees? boolean 是否返回角度
---@param opts? image_cv_binary_options 选项
---@return image_cv_result magnitude 幅值
---@return image_cv_result angle 角度
function M.cart_to_polar(x, y, angle_in_degrees, opts) end

--- 极坐标转笛卡尔坐标。
---@param magnitude image_cv_source 幅值
---@param angle image_cv_source 角度
---@param angle_in_degrees? boolean 角度单位
---@param opts? image_cv_binary_options 选项
---@return image_cv_result x x 分量
---@return image_cv_result y y 分量
function M.polar_to_cart(magnitude, angle, angle_in_degrees, opts) end

--- 获取二维旋转矩阵。
---@param center image_cv_point 中心点
---@param angle number 角度
---@param scale? number 缩放
---@return image_cv_mat* matrix 旋转矩阵
function M.get_rotation_matrix_2d(center, angle, scale) end

--- 创建 Hanning 窗口。
---@param width integer 宽
---@param height integer 高
---@param type? integer|string 类型
---@return image_cv_mat* window 窗口
function M.create_hanning_window(width, height, type) end

--- 查找轮廓。
---@param source image_cv_source 输入
---@param mode? integer|string 检索模式
---@param method? integer|string 近似方法
---@param opts? { return_hierarchy?: boolean } 选项
---@return image_cv_contour[] contours 轮廓数组
---@return image_cv_contour_hierarchy[]? hierarchy 层级关系
function M.find_contours(source, mode, method, opts) end

--- 连通域分析。
---@param source image_cv_source 输入
---@param connectivity? 4|8 连通性
---@param ltype? integer|string 标签类型
---@return image_cv_connected_components_result result 连通域结果
function M.connected_components_with_stats(source, connectivity, ltype) end

--- 计算外接矩形。
---@param contour image_cv_contour 轮廓
---@return image_cv_rect rect 外接矩形
function M.bounding_rect(contour) end

--- 计算轮廓面积。
---@param contour image_cv_contour 轮廓
---@param oriented? boolean 是否带方向
---@return number area 面积
function M.contour_area(contour, oriented) end

--- 计算轮廓周长。
---@param contour image_cv_contour 轮廓
---@param closed? boolean 是否闭合
---@return number length 周长
function M.arc_length(contour, closed) end

--- 多边形近似。
---@param contour image_cv_contour 轮廓
---@param epsilon number 精度
---@param closed? boolean 是否闭合
---@return image_cv_contour contour 近似轮廓
function M.approx_poly_dp(contour, epsilon, closed) end

--- 凸包。
---@param contour image_cv_contour 轮廓
---@param return_points? boolean 是否返回点；false 返回索引
---@return image_cv_contour|integer[] hull 凸包
function M.convex_hull(contour, return_points) end

--- 点到多边形测试。
---@param contour image_cv_contour 轮廓
---@param point image_cv_point 点
---@param measure_dist? boolean 是否测量距离
---@return number result 结果
function M.point_polygon_test(contour, point, measure_dist) end

--- 查找非零点。
---@param source image_cv_source 输入
---@return image_cv_point[] points 非零点
function M.find_non_zero(source) end

--- 匹配形状。
---@param contour1 image_cv_contour 轮廓 1
---@param contour2 image_cv_contour 轮廓 2
---@param method? integer 方法
---@param parameter? number 参数
---@return number score 分数
function M.match_shapes(contour1, contour2, method, parameter) end

--- 拟合椭圆。
---@param contour image_cv_contour 轮廓
---@return image_cv_rotated_rect rect 旋转矩形
function M.fit_ellipse(contour) end

--- 拟合椭圆 AMS。
---@param contour image_cv_contour 轮廓
---@return image_cv_rotated_rect rect 旋转矩形
function M.fit_ellipse_ams(contour) end

--- 拟合椭圆 Direct。
---@param contour image_cv_contour 轮廓
---@return image_cv_rotated_rect rect 旋转矩形
function M.fit_ellipse_direct(contour) end

--- 旋转矩形相交。
---@param rect1 image_cv_rotated_rect 矩形 1
---@param rect2 image_cv_rotated_rect 矩形 2
---@return integer code 相交类型
---@return image_cv_point[] points 相交点
function M.rotated_rectangle_intersection(rect1, rect2) end

--- 拟合直线。
---@param contour image_cv_contour 轮廓
---@param dist_type? image_cv_distance_type 距离类型
---@param param? number 参数
---@param reps? number 半径精度
---@param aeps? number 角度精度
---@return image_cv_line_result line 直线
function M.fit_line(contour, dist_type, param, reps, aeps) end

--- 最小面积矩形。
---@param contour image_cv_contour 轮廓
---@return image_cv_rotated_rect rect 旋转矩形
function M.min_area_rect(contour) end

--- 最小外接圆。
---@param contour image_cv_contour 轮廓
---@return image_cv_circle_result circle 圆
function M.min_enclosing_circle(contour) end

--- 最小外接三角形。
---@param contour image_cv_contour 轮廓
---@return image_cv_triangle_result triangle 结果
function M.min_enclosing_triangle(contour) end

--- 凸多边形相交。
---@param contour1 image_cv_contour 轮廓 1
---@param contour2 image_cv_contour 轮廓 2
---@param handle_nested? boolean 是否处理嵌套
---@return image_cv_intersection_result result 结果
function M.intersect_convex_convex(contour1, contour2, handle_nested) end

--- 获取旋转矩形四个顶点。
---@param rect image_cv_rotated_rect 旋转矩形
---@return image_cv_point[] points 顶点数组
function M.box_points(rect) end

--- 计算矩。
---@param source image_cv_source|image_cv_contour 输入
---@param binary_image? boolean 是否按二值图处理
---@return image_cv_moments moments 矩
function M.moments(source, binary_image) end

--- 计算 Hu 矩。
---@param source image_cv_source|image_cv_contour 输入
---@param binary_image? boolean 是否按二值图处理
---@return number[] hu_moments Hu 矩数组
function M.hu_moments(source, binary_image) end

--- 计算直方图。
---@param source image_cv_source 输入
---@param opts? image_cv_hist_options 选项
---@return image_cv_mat* hist 直方图
function M.calc_hist(source, opts) end

--- 比较直方图。
---@param hist1 image_cv_source 直方图 1
---@param hist2 image_cv_source 直方图 2
---@param method? image_cv_hist_compare_method 比较方式
---@return number score 分数
function M.compare_hist(hist1, hist2, method) end

--- 概率霍夫直线检测。
---@param source image_cv_source 输入
---@param rho number rho
---@param theta number theta
---@param threshold integer 阈值
---@param min_line_length? number 最小线段长度
---@param max_line_gap? number 最大线段间隙
---@return table[] lines 线段列表
function M.hough_lines_p(source, rho, theta, threshold, min_line_length, max_line_gap) end

--- 霍夫圆检测。
---@param source image_cv_source 输入
---@param method image_cv_hough_circle_method 检测方法
---@param dp number 累加器分辨率比例
---@param min_dist number 圆心最小距离
---@param param1? number 参数 1
---@param param2? number 参数 2
---@param min_radius? integer 最小半径
---@param max_radius? integer 最大半径
---@return table[] circles 圆列表
function M.hough_circles(source, method, dp, min_dist, param1, param2, min_radius, max_radius) end

--- 距离变换。
---@param source image_cv_source 输入
---@param distance_type? image_cv_distance_type 距离类型
---@param mask_size? integer mask size
---@param opts? image_cv_binary_options|{ dst_type?: integer|string, return_image?: boolean } 选项
---@return image_cv_result result 距离图
function M.distance_transform(source, distance_type, mask_size, opts) end

--- 角点检测。
---@param source image_cv_source 输入
---@param max_corners integer 最大角点数
---@param quality_level number 质量阈值
---@param min_distance number 最小距离
---@param mask_or_block_size? image_cv_source|integer 遮罩或 block size
---@param use_harris? boolean 是否使用 Harris
---@param k? number Harris 参数
---@return image_cv_point[] corners 角点
function M.good_features_to_track(source, max_corners, quality_level, min_distance, mask_or_block_size, use_harris, k) end

--- 模板匹配。
---@param image image_cv_source 原图
---@param templ image_cv_source 模板
---@param method? image_cv_template_method 匹配方法
---@param mask? image_cv_source 遮罩
---@return image_cv_mat* result 匹配结果矩阵
function M.match_template(image, templ, method, mask) end

--- 取最小最大值及位置。
---@param source image_cv_source 输入
---@param mask? image_cv_source 遮罩
---@return image_cv_min_max_loc result 结果
function M.min_max_loc(source, mask) end

--- 绘制矩形。
---@param source image_cv_source 输入
---@param x1 integer 左上角 X
---@param y1 integer 左上角 Y
---@param x2 integer 右下角 X
---@param y2 integer 右下角 Y
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.rectangle(source, x1, y1, x2, y2, color, thickness, opts) end

--- 绘制圆。
---@param source image_cv_source 输入
---@param x integer 圆心 X
---@param y integer 圆心 Y
---@param radius integer 半径
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.circle(source, x, y, radius, color, thickness, opts) end

--- 绘制线段。
---@param source image_cv_source 输入
---@param x1 integer 起点 X
---@param y1 integer 起点 Y
---@param x2 integer 终点 X
---@param y2 integer 终点 Y
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.line(source, x1, y1, x2, y2, color, thickness, opts) end

--- 绘制折线。
---@param source image_cv_source 输入
---@param points image_cv_contours 点集
---@param is_closed boolean 是否闭合
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param line_type? image_cv_line_type 线型
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.polylines(source, points, is_closed, color, thickness, line_type, opts) end

--- 填充多边形。
---@param source image_cv_source 输入
---@param points image_cv_contours 点集
---@param color image_cv_scalar 颜色
---@param line_type? image_cv_line_type 线型
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.fill_poly(source, points, color, line_type, opts) end

--- 绘制轮廓。
---@param source image_cv_source 输入
---@param contours image_cv_contours 轮廓数组
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.draw_contours(source, contours, color, thickness, opts) end

--- 计算文字尺寸。
---@param text string 文本
---@param font_face integer|string 字体
---@param font_scale number 字体缩放
---@param thickness? integer 线宽
---@return image_cv_text_size size 文字尺寸
function M.get_text_size(text, font_face, font_scale, thickness) end

--- 绘制文字。
---@param source image_cv_source 输入
---@param text string 文本
---@param org image_cv_point 原点
---@param font_face integer|string 字体
---@param font_scale number 字体缩放
---@param color image_cv_scalar 颜色
---@param thickness? integer 线宽
---@param line_type? image_cv_line_type 线型
---@param bottom_left_origin? boolean 是否以左下为原点
---@param opts? image_cv_binary_options 选项
---@return image_cv_result result 处理结果
function M.put_text(source, text, org, font_face, font_scale, color, thickness, line_type, bottom_left_origin, opts) end

--- 在图片中查找模板图。
---@param image ImageObject* 原图
---@param template ImageObject* 模板图片
---@param opts? image_cv_match_options 选项
---@return integer|image_cv_match[] x_or_matches X 坐标或匹配数组
---@return integer|ImageObject*|nil y_or_visual Y 坐标或可视化图片
---@return number? confidence 置信度
---@return ImageObject*? visual 可视化图片
function M.find_image(image, template, opts) end

--- 二值化并替换当前图片。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function M.binaryzation(image, threshold) end

--- 二值化并返回副本。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function M.binaryzation_copy(image, threshold) end

--- 二值化并替换当前图片。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function M.binarization(image, threshold) end

--- 二值化并返回副本。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function M.binarization_copy(image, threshold) end

--- 二值化并替换当前图片。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 当前图片
function M.binarize(image, threshold) end

--- 二值化并返回副本。
---@param image ImageObject* 图片
---@param threshold? number 阈值，省略时使用 OTSU
---@return ImageObject* image 新图片
function M.binarize_copy(image, threshold) end

--- 调整图片尺寸并返回副本。
---@param image ImageObject* 图片
---@param width integer 输出宽
---@param height integer 输出高
---@return ImageObject* image 新图片
function M.resize_copy(image, width, height) end

--- 拼接长图。
---@param images ImageObject*[] 图片数组
---@param opts? image_cv_stitch_long_options 选项
---@return ImageObject* image 拼接后的长图
function M.stitch_long(images, opts) end

--- 查找多边形。
---@param image ImageObject* 图片
---@param opts image_cv_find_polygon_options 选项
---@return image_cv_contour[] contours 轮廓数组
---@return ImageObject*? visual 可视化图片
function M.find_polygon(image, opts) end

--- 对比两张同尺寸图片的差异。
---@param image1 ImageObject* 图片 1
---@param image2 ImageObject* 图片 2
---@param opts? image_cv_compare_options 选项
---@return image_cv_contour[] contours 差异轮廓
---@return ImageObject*? visual 可视化图片
function M.compare_image(image1, image2, opts) end

--- 查找与模板形状相似的轮廓。
---@param image ImageObject* 图片
---@param shape ImageObject*|image_cv_contours 模板图片或模板轮廓
---@param opts? image_cv_find_shapes_options 选项
---@return image_cv_contour[][] groups 每个模板对应的匹配轮廓
---@return ImageObject*? visual 可视化图片
function M.find_shapes(image, shape, opts) end

--- 提取图片轮廓。
---@param image ImageObject* 图片
---@param opts? image_cv_to_shapes_options 选项
---@return image_cv_contour[] contours 轮廓数组
---@return ImageObject*? visual 可视化图片
function M.to_shapes(image, opts) end

--- 基于特征检测多个模板。
---@param image ImageObject* 图片
---@param opts image_cv_detect_templates_options 模板数组及选项
---@return image_cv_contour[] contours 检测到的模板轮廓
---@return ImageObject*? visual 可视化图片
function M.detect_templates(image, opts) end

--- 初始化全局 Paddle OCR 上下文。
---@param opts? image_cv_paddle_ocr_config 选项
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.paddle_ocr_init(opts) end

--- 对图片执行 OCR。
---@param image ImageObject* 图片
---@param opts? image_cv_paddle_ocr_config 选项
---@return image_cv_paddle_ocr_item[]? results 识别结果
---@return ImageObject*|string|nil visual_or_err 可视化图片或错误信息
function M.paddle_ocr(image, opts) end

--- 创建 Paddle OCR 上下文。
---@param opts? image_cv_paddle_ocr_config 选项
---@return image_cv_paddle_ocr_context*? context OCR 上下文
---@return string? errMsg 错误信息
function M.new_paddle_ocr(opts) end

--- 创建 Paddle YOLOv3 目标检测上下文。
---@param opts? image_cv_paddle_yolov3_options 选项
---@return image_cv_paddle_yolov3_context*? context YOLOv3 上下文
---@return string? errMsg 错误信息
function M.new_paddle_yolov3(opts) end

--- 创建 Paddle YOLOv3 目标检测上下文。
---@param opts? image_cv_paddle_yolov3_options 选项
---@return image_cv_paddle_yolov3_context*? context YOLOv3 上下文
---@return string? errMsg 错误信息
function M.new_paddle_yolov3_object_detector(opts) end

return M
