OpenCV中FilterEngine与filter、image的关系

opencv的filter是如何设计的?如何抽象的?

1. filter的要素有哪些?
    成员 size与anchor
    重载函数 void operator()(src, dst, dststep, dstcount, width)
2. filter有哪些?
create*Filter

3. filterEngine描述的是filter与image的关系
关系如下:


滤波函数boxFilter, blur, GuassianBlur, Sobel等基本上都会调用filterEngine类,来完成滤波操作,而且接口简单易用。

使用方法, 接口:

filterEngine = create*filter();
filterEngine->apply(src, dst);

filterPtr包含 各个具体filter的处理图像的抽象接口,即operator()重载函数,这是处理图像数据的具体真实途径。
如filterEngine->apply(src, dst);
apply函数就是调用filter的operator()函数,
例如 (*filter2D)((const uchar**)brows, dst, dststep, i, roi.width, cn);

针对二维的filter,调用Filter2D或MorphFilter的重载函数。

注意:filter2D是filterEngine中的BaseFilter的指针,而Filter2D是BaseFilter的子类。


接口简单,而实际上每种filter实际处理的过程和代码都一点不少。


子类Filter2D和MorphFilter包含了获取kernel的过程。


--------------------
image
borderInterpolate/copyMakeBorder,当需要扩展border时,左右、上下分别扩展
类型检查

borderInterpolate 是一维的边界插值函数

 Various border types, image boundaries are denoted with '|'
 * BORDER_REPLICATE:     aaaaaa|abcdefgh|hhhhhhh
 * BORDER_REFLECT:       fedcba|abcdefgh|hgfedcb
 * BORDER_REFLECT_101:   gfedcb|abcdefgh|gfedcba
 * BORDER_WRAP:          cdefgh|abcdefgh|abcdefg        
 * BORDER_CONSTANT:      iiiiii|abcdefgh|iiiiiii  with some specified 'i'

copyMakeBorder 在图像image周围生成border
--------------------
这里filterEngine的设计理念:
1. 分离filter和image
2. 抽象filter接口,3种基本的抽象filter类
3. init中完成各个filter的初始化,及类型检查
4. 在apply、start函数中,完成filter过程

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值