该函数用于创建可分离线性滤波器,并将其初始化到给定的 AvicFilterEngine 结构体中。函数根据输入图像和输出图像类型、行核和列核、锚点、delta 和边界类型来配置滤波器参数。

  1. 将 '_srcType' 和 '_dstType' 转换为对应的 AvicCV 类型,例如 AVICCV_8U、AVICCV_32F 等。
  2. 获取输入图像和输出图像的深度,通道数。
  3. 计算行核和列核的尺寸。
  4. 如果锚点的 x 坐标小于 0,则将其设置为行核尺寸的一半。
  5. 如果锚点的 y 坐标小于 0,则将其设置为列核尺寸的一半。
  6. 根据行核的尺寸和类型,确定行核的类型 'rtype'。
  7. 根据列核的尺寸和类型,确定列核的类型 'ctype'。
  8. 确定中间缓冲区的深度 'bdepth',初始化 'bits' 为 0。
  9. 如果输入图像的深度为 AVICCV_8U,并且行核和列核的类型为 'KERNEL_SMOOTH + KERNEL_SYMMETRICAL',并且输出图像的深度为 AVICCV_8U;或者行核和列核的类型为 'KERNEL_SYMMETRICAL + KERNEL_ASYMMETRICAL',并且行核和列核的类型为 'KERNEL_INTEGER',并且输出图像的深度为 AVICCV_16S,则更新中间缓冲区的深度为 AVICCV_32S,'bits' 为 8 或 0。并将行核和列核转换为中间缓冲区的深度,并将 '_bits' 更新为 '_bits' 的两倍。
  10. 否则,将行核和列核转换为中间缓冲区的深度。
  11. 根据中间缓冲区的深度和通道数,确定中间缓冲区的类型 '_bufType'。
  12. 根据输入图像的类型、中间缓冲区的类型和行核,获取行滤波器 '_rowFilter'。
  13. 根据中间缓冲区的类型、输出图像的类型、列核、锚点的 y 坐标、列核的类型、'delta' 和 'bits',获取列滤波器 '_columnFilter'。
  14. 初始化滤波引擎 'f',并调用 'init_filterEngine' 函数,将 '_rowFilter'、'_columnFilter'、'_srcType'、'_dstType'、'_bufType'、'_rowBorderType' 和 '_columnBorderType' 作为参数传入。
  15. 返回 1 表示创建可分离滤波器成功。

该函数的实现细节与具体图像处理库的 API 相关。

创建可分离线性滤波器函数: int createSeparableLinearFilter(AvicFilterEngine* f, ...)

原文地址: https://www.cveoy.top/t/topic/wRy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录