创建可分离线性滤波器函数: int createSeparableLinearFilter(AvicFilterEngine* f, ...)
该函数用于创建可分离线性滤波器,并将其初始化到给定的 AvicFilterEngine 结构体中。函数根据输入图像和输出图像类型、行核和列核、锚点、delta 和边界类型来配置滤波器参数。
- 将 '_srcType' 和 '_dstType' 转换为对应的 AvicCV 类型,例如 AVICCV_8U、AVICCV_32F 等。
- 获取输入图像和输出图像的深度,通道数。
- 计算行核和列核的尺寸。
- 如果锚点的 x 坐标小于 0,则将其设置为行核尺寸的一半。
- 如果锚点的 y 坐标小于 0,则将其设置为列核尺寸的一半。
- 根据行核的尺寸和类型,确定行核的类型 'rtype'。
- 根据列核的尺寸和类型,确定列核的类型 'ctype'。
- 确定中间缓冲区的深度 'bdepth',初始化 'bits' 为 0。
- 如果输入图像的深度为 AVICCV_8U,并且行核和列核的类型为 'KERNEL_SMOOTH + KERNEL_SYMMETRICAL',并且输出图像的深度为 AVICCV_8U;或者行核和列核的类型为 'KERNEL_SYMMETRICAL + KERNEL_ASYMMETRICAL',并且行核和列核的类型为 'KERNEL_INTEGER',并且输出图像的深度为 AVICCV_16S,则更新中间缓冲区的深度为 AVICCV_32S,'bits' 为 8 或 0。并将行核和列核转换为中间缓冲区的深度,并将 '_bits' 更新为 '_bits' 的两倍。
- 否则,将行核和列核转换为中间缓冲区的深度。
- 根据中间缓冲区的深度和通道数,确定中间缓冲区的类型 '_bufType'。
- 根据输入图像的类型、中间缓冲区的类型和行核,获取行滤波器 '_rowFilter'。
- 根据中间缓冲区的类型、输出图像的类型、列核、锚点的 y 坐标、列核的类型、'delta' 和 'bits',获取列滤波器 '_columnFilter'。
- 初始化滤波引擎 'f',并调用 'init_filterEngine' 函数,将 '_rowFilter'、'_columnFilter'、'_srcType'、'_dstType'、'_bufType'、'_rowBorderType' 和 '_columnBorderType' 作为参数传入。
- 返回 1 表示创建可分离滤波器成功。
该函数的实现细节与具体图像处理库的 API 相关。
原文地址: https://www.cveoy.top/t/topic/wRy 著作权归作者所有。请勿转载和采集!