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的关系
关系如下:

OpenCV中FilterEngine与filter、image的关系_第1张图片

滤波函数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过程

你可能感兴趣的:(image,filter,扩展,border,DST,Types)