OpenCV2 图像处理与计算机视觉(一)—— 去除一幅二值化图像中的椒盐噪声
2016-04-19 18:43
1011 查看
通过 imgproc.hpp 文件中的 threshold 函数我们可得一幅二值化图像(或者叫 mask 掩码图像),所谓一幅二值化图像中的椒盐噪声,即为在一个 image patch 中,如果某一点的像素值为 0(也即黑色),而其 5*5 的邻域内均是255(白色),我们就可简单地将这个黑色孤点视为椒盐噪声。
去除一幅二值化图像中的椒盐噪声的关键就在于寻找这样的一些黑色孤点:
去除一幅二值化图像中的椒盐噪声的关键就在于寻找这样的一些黑色孤点:
void removePepperNoise(Mat& mask) { for (int y = 2; y < mask.rows-2; ++y) { uchar *pThis = mask.ptr(y); uchar *pUp1 = mask.ptr(y - 1); uchar *pUp2 = mask.ptr(y - 2); uchar *pDown1 = mask.ptr(y + 1); uchar *pDown2 = mask.ptr(y + 2); pThis += 2; pUp1 += 2; pUp2 += 2; pDown1 += 2; pDown2 += 2; int x = 2; while( x < mask.cols - 2) { uchar v = *pThis; // 当前点为黑色 if (v == 0) { // 5 * 5 邻域的外层 bool allAbove = *(pUp2 - 2) && *(pUp2 - 1) && *(pUp2) && *(pUp2 + 1) && *(pUp2 + 2); bool allBelow = *(pDown2 - 2) && *(pDown2 - 1) && *(pDown2) && *(pDown2 + 1) && *(pDown2 + 2); bool allLeft = *(pUp1 - 2) && *(pThis - 2) && *(pDown1 - 2); bool allRight = *(pUp1 + 2) && *(pThis + 2) && *(pDown1 + 2); bool surroundings = allAbove && allBelow && allLeft && allRight; if (surroundings) { // 5*5 邻域的内层(3*3的小邻域) *(pUp1 - 1) = *(pUp1) = *(pUp1+1) = 255; *(pThis - 1) = *pThis = *(pThis + 1) = 255; *(pDown1 - 1) = *pDown1 = *(pDown1 + 1) = 255; //(*pThis) = ~(*pThis); // 0 ⇒ 255 } pUp2 += 2; pUp1 += 2; pThis += 2; pDown1 += 2; pDown2 += 2; x += 2; } ++pThis; ++pUp2; ++pUp1; ++pDown1; ++pDown2; ++x; } } }
相关文章推荐
- tomcat强制https访问
- apache HttpClients实例,传入json对象。对应的springMvc通过HandlerMethodArgumentResolver解析两个对象绑定
- TCP协议中的三次握手
- 【数据结构】ArrayList原理及实现学习总结
- 【游戏数据库】大型网络游戏数据库设计方面讨论?(微软平台) 游戏数据库
- HashTable与多条件筛选
- [Java语言] Java网络请求工具类
- HTTP协议详解(真的很经典)
- 数据结构-广义表
- $_SERVER['HTTP_USER_AGENT']
- TCP SYN泛洪攻击
- 介绍HTTPS
- BZOJ4538 HNOI2016 网络
- 计算机网络学习笔记
- org.jasig.cas.client.session.SingleSignOutHttpSessionListener
- [网络流24题] 最长递增子序列 (最多不相交路径---网络最大流)
- 各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)
- 各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)
- 工程师离不开的那些电路设计工具 干货get√
- 工程师离不开的那些电路设计工具 干货get√