【opencv 源码剖析】 三、 morphOp 数学形态学滤波函数, 腐蚀和膨胀就是通过这个函数得到的
2024-10-06 18:09:13
//
//_kernel : 形态学滤波的核
//anchor: 锚点再滤波核的位置
//iterations: 迭代次数
static void morphOp( int op, InputArray _src, OutputArray _dst,
InputArray _kernel,
Point anchor, int iterations,
int borderType, const Scalar& borderValue )
{
Mat src = _src.getMat(), kernel = _kernel.getMat();
Size ksize = kernel.data ? kernel.size() : Size(3,3);
anchor = normalizeAnchor(anchor, ksize); CV_Assert( anchor.inside(Rect(0, 0, ksize.width, ksize.height)) ); _dst.create( src.size(), src.type() );
Mat dst = _dst.getMat(); if( iterations == 0 || kernel.rows*kernel.cols == 1 )
{
src.copyTo(dst);
return;
} if( !kernel.data )
{
kernel = getStructuringElement(MORPH_RECT, Size(1+iterations*2,1+iterations*2));
anchor = Point(iterations, iterations);
iterations = 1;
}
else if( iterations > 1 && countNonZero(kernel) == kernel.rows*kernel.cols )
{
anchor = Point(anchor.x*iterations, anchor.y*iterations);
kernel = getStructuringElement(MORPH_RECT,
Size(ksize.width + (iterations-1)*(ksize.width-1),
ksize.height + (iterations-1)*(ksize.height-1)),
anchor);
iterations = 1;
} int nStripes = 1;
#if defined HAVE_TBB && defined HAVE_TEGRA_OPTIMIZATION //这里是TBB指令集操作, 如果你的库没有使用tbb 则这句话不会执行
if (src.data != dst.data && iterations == 1 && //NOTE: threads are not used for inplace processing
(borderType & BORDER_ISOLATED) == 0 && //TODO: check border types
src.rows >= 64 ) //NOTE: just heuristics
nStripes = 4;
#endif parallel_for(BlockedRange(0, nStripes),
MorphologyRunner(src, dst, nStripes, iterations, op, kernel, anchor, borderType, borderType, borderValue)); //Ptr<FilterEngine> f = createMorphologyFilter(op, src.type(),
// kernel, anchor, borderType, borderType, borderValue ); //f->apply( src, dst );
//for( int i = 1; i < iterations; i++ )
// f->apply( dst, dst );
}
最新文章
- 浅谈如何使用python抓取网页中的动态数据
- 用excel做分组散点图
- VMware安装centos虚拟机
- 对dijkstra算法的自我理解,c#例子
- DDD~DDD从零起步架构说明
- JSP网站开发基础总结《十二》
- [Android Tips] 10. Pull out /data/data/${package_name} files without root access
- The Socket API, Part 5: SCTP
- POJ 2528 Mayor&#39;s posters (线段树,染色问题,离散化要注意)
- java 转换 小函数(不断增加中。。。)
- 路E施工管理ERP系统
- Spring框架入门之Spring简介
- 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)
- MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
- Java语法基础学习DayTwenty(反射机制续)
- DIYer最担心的事来了!CPU降价彻底无望
- python repr和str
- IO写 PrintWriter
- C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数
- HTML5游戏实战之精灵翻转
热门文章
- centos7 安装 mysql(在线安装)
- count(1) 与 count(*) 比较
- 阿里云轻量应用服务器 配置mysql详解(转载)
- double,float,BigDecimal类型数值的操作
- 解决Java中的HttpServletResponse中文乱码问题
- SpringBoot: 12.异常处理方式2(使用@ExceptionHandle注解)(转)
- 深入理解channels - kavya Joshi
- python列表删除--remove(),del,pop()
- 【DSP开发】DSP能用VS2010生成的链接库文件吗?
- Docker通过挂载安装mysql