转自:BoxBlur(方框模糊)

C++原型:

void __stdcall BoxBlur(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride, int Radius, int EdgeBehavior)

C#声明:

[DllImport("ImageProcessing.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, ExactSpelling = true)]
internal static extern void BoxBlur(byte* Src, byte *Dest, int Width, int Height, int Stride, int Radius, int EdgeBehavior);

VB.NET声明:

<DllImport("ImageProcessing.dll", CallingConvention := CallingConvention.StdCall, CharSet := CharSet.Unicode, ExactSpelling := True)> _
Friend Shared Sub BoxBlur(ByVal Src As IntPtr, ByVal Dest As IntPtr, ByVal Width As Integer, ByVal Height As Integer, ByVal Stride As Integer, ByVal Radius As Integer, Byval EdgeBehavior as Integer)
End Sub

VB6.0声明:

Private Declare Sub BoxBlur Lib "ImageProcessing" (ByVal Src As Long, ByVal Dest As Long, ByVal Width As Long, ByVal Height As Long, ByVal Stride As Long, ByVal Radius As Long, byval EdgeBehavior as Long)

函数说明:

/// <summary>
/// 实现图像方框模糊效果,O(1)复杂度,最新整理时间 2014.9.17。
/// </summary>
/// <param name="Src">源图像数据在内存的起始地址。</param>
/// <param name="Dest">目标图像数据在内存的起始地址。</param>
/// <param name="Width">源和目标图像的宽度。</param>
/// <param name="Height">源和目标图像的高度。</param>
/// <param name="Stride">图像的扫描行大小。</param>
/// <param name="Radius">方框模糊的半径,有效范围[1,1000]。</param>
/// <param name="EdgeBehavior">边缘处数据的处理方法,0表示重复边缘像素,1使用镜像的方式对边缘像素求均值。</param>
/// <remarks> 1: 能处理8位灰度和24位图像。</remarks>
/// <remarks> 2: Src和Dest可以相同,在相同时速度会稍慢。</remarks>
/// <remarks> 3: 使用了多线程,可加快执行速度。</remarks>

算法效果:

       

       

            EdgeBehavior  = 0                              EdgeBehavior = 1

  注意上面的EdgeBehavior = 0和 EdgeBehavior = 1 时图像边缘部分的区别,=0时超出采样边缘的时直接用边缘的部分代替,而=1时时镜像的,因此效果会更好。

处理速度:

  I3  M380 2.53GHZ 笔记本上测试:1000 * 1000 彩色像素,用时12ms(时间是于参数无关的)。

代码情况:

      本算法考虑CPU的线程不是轻量级的,因此采用了一种在单核上比其他BoxBlur都快的方式,但内部还是将核心部分分开给了多核处理。直接使用本代码不适合GPU实现。

BoxBlur(方框模糊)相关推荐

  1. matlab练习程序(方框模糊)

    这里所谓的方框模糊呢,其实就是以前自己很熟悉的均值滤波.原理就是将当前像素为中心,以半径r四周的(2*r+1)^2个像素求平均再赋值给当前像素就可以啦.这个实在是没什么可解释的了,都是很简单的东西.下 ...

  2. 《OpenCV3编程入门》学习笔记6 图像处理(一)线性滤波:方框滤波、均值滤波、高斯滤波

    第6章 图像处理 6.1 线性滤波:方框滤波.均值滤波.高斯滤波 6.1.1 图像滤波与滤波器 1.图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 目的: (1)抽出对象的特征作为图 ...

  3. 滤波、漫水填充、图像金字塔、图像缩放、阈值化

      imgpro 组件是 Image 和 Process 这两个单词的缩写组合,即图像处理模块,这个模块包含了如下内容: 文章目录 1.线性滤波:方框滤波.均值滤波.高斯滤波 1.1 平滑处理 1.2 ...

  4. 超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...

    我在两年前的博客里曾经写过 SSE图像算法优化系列七:基于SSE实现的极速的矩形核腐蚀和膨胀(最大值和最小值)算法  一文,通过SSE的优化把矩形核心的腐蚀和膨胀做到了不仅和半径无关,而且速度也相当的 ...

  5. OpenCV图像去噪

    OpenCV图像处理篇之图像平滑 图像平滑算法 程序分析及结果 图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器,为不改变图像的相位信息, 一般使用线性滤波器,其统一形 ...

  6. 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...

    首先注意点:关于OpenCV中的函数,有老的数据结构,还有新的opencv2的数据结构,一般地区别就是IplImage*与Mat的区别,两者大致分别对应着C和C++内的两个功能一样,但是函数名称有别. ...

  7. opencv 图像去噪要点总结

    opencv 图像去噪要点总结 一 图像平滑 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器.不同的核函数代表不同的滤波器,有不同的用途 ...

  8. halcon区域腐蚀膨胀算子_超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...

    超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码). 发布时间:2019-03-20 12:32, 浏览次数:1259 , 标签: halcon 我在两年前的博客里 ...

  9. 十种图像模糊算法的总结与实现

    作者:毛星云,腾讯 IEG 游戏开发工程师 后处理(Post-Processing),在图形学和游戏开发等领域是提升最终画面呈现品质的重要渲染技术.后处理渲染技术的好坏,往往决定了游戏画面是否能够达到 ...

  10. OpenCV3学习(4.2)——图像常用滤波方法(方框、均值、高斯、中值、双边)

    滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波: 1.方框滤波:模糊图像 2.均值滤波:模糊图像 3.高斯滤波:信号的平 ...

最新文章

  1. perl基本语法--转载
  2. java调用C++ DLL库方法
  3. HTML5 API详解(3):为何网页上要增加Battery电池状态API
  4. 分配任务的代码PHP,php计划任务的示例代码分享
  5. 关于linux模块驱动简单的Makefile
  6. python从入门到精通-终于懂得python从入门到精通教程
  7. ARKit Plane Detection (平面检测)
  8. python自动化任务_更好用的 Python 任务自动化工具:nox 官方教程
  9. 基于Java的实现宠物管理系统的设计与实现
  10. MIUI12国际版、欧版、波兰版、国内开发板刷机排雷现场
  11. J2EE架构的优点和缺点有哪些
  12. QCC3020/QCC3040 TWS耳机按键切换EQ,APP切换EQ功能实现
  13. 修改屏幕分辨率比例,4*3拼接屏 21:9 比例,大屏项目拼接适配屏解决方案
  14. Windows API 教程(七) hook 钩子监听
  15. .rvm/gems/ruby-2.4.1@global/gems/cocoapods-1.5.0/lib/cocoapods/executable.rb:89: warning: Insecure
  16. layui结合json viewer实现代码格式化
  17. 【敏捷开发每日一贴】用户故事Userstory
  18. 再有人问你volatile是什么,就把这篇文章发给他,让他哑口无言
  19. 新建UEFI启动分区
  20. python开发html_Python开发——16.HTML

热门文章

  1. 使用WinSCP命令上传文件到CentOS
  2. select、poll、epoll的区别
  3. 03. 绝对不要以多态(polymorphically)方式处理数组
  4. Maven中DependencyManagement和Dependencies区别
  5. linux操作命令 mongo_MongoDB常用操作命令整理
  6. 合沟微服务怎么添加_如何在微服务中使用webservice?
  7. pip mysql_config not found_pip安装mysql-python出现mysql_config not found错误
  8. dls 深度受限搜索java_JAVA深入学习(栈和队列)之栈
  9. 80字符带空格 段错误_简单错误记录
  10. css两张图片怎么合在一起_PhotoShop怎么把两张图片合成一张?怎么用ps把两张图片合成一张?...