对于上图的二值化图像,要去除左下角和右上角的噪点,方法:使用opencv去掉黑色面积较小的连通域。

代码

[cpp]  view plain  copy
  1. CvSeq* contour = NULL;
  2. double minarea = 100.0;
  3. double tmparea = 0.0;
  4. CFileDialog dlg(true);
  5. if (dlg.DoModal()==IDOK)
  6. {
  7. CvMemStorage* storage = cvCreateMemStorage(0);
  8. IplImage* img_src= cvLoadImage(dlg.GetPathName(),CV_LOAD_IMAGE_ANYCOLOR);
  9. IplImage* img_Clone=cvCloneImage(img_src);
  10. //访问二值图像每个点的值
  11. uchar *pp;
  12. //显示原始图像
  13. cvNamedWindow("img_src",CV_WINDOW_AUTOSIZE);
  14. cvShowImage("img_src", img_src);
  15. IplImage* img_dst = cvCreateImage(cvGetSize(img_src),IPL_DEPTH_8U,1);
  16. //------------搜索二值图中的轮廓,并从轮廓树中删除面积小于某个阈值minarea的轮廓-------------//
  17. CvScalar color = cvScalar(255,0,0);//CV_RGB(128,0,0);
  18. CvContourScanner scanner = NULL;
  19. scanner = cvStartFindContours(img_src,storage,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE,cvPoint(0,0));
  20. //开始遍历轮廓树
  21. CvRect rect;
  22. while (contour=cvFindNextContour(scanner))
  23. {
  24. tmparea = fabs(cvContourArea(contour));
  25. rect = cvBoundingRect(contour,0);
  26. if (tmparea < minarea/*||tmparea>4900*/)
  27. {
  28. //当连通域的中心点为黑色时,而且面积较小则用白色进行填充
  29. pp=(uchar*)(img_Clone->imageData + img_Clone->widthStep*(rect.y+rect.height/2)+rect.x+rect.width/2);
  30. if (pp[0]==0)
  31. {
  32. for(int y = rect.y;y<rect.y+rect.height;y++)
  33. {
  34. for(int x =rect.x;x<rect.x+rect.width;x++)
  35. {
  36. pp=(uchar*)(img_Clone->imageData + img_Clone->widthStep*y+x);
  37. if (pp[0]==0)
  38. {
  39. pp[0]=255;
  40. }
  41. }
  42. }
  43. }
  44. }
  45. }
  46. cvSaveImage("c://temp//aav.bmp",img_Clone);

分析:对于上图来说连通域共有: 

这么七个,我们的目标是去除2号和3号连通域,

程序中语句 tmparea = fabs(cvContourArea(contour));可以得到当前连通域的面积,当此面积小于阈值时对其填充为白色。

rect = cvBoundingRect(contour,0); 得到的是框住连通域的最小矩形,对矩形中的黑色部分将其填充为白色,但是这样的话,连通域6和4两个连通域被填充成了白色的矩形,这显然不符合我们的要求,这样就要判断此连通域是黑色联通域还是白色连通域,采用的方法是测试矩形的中心点,如果其为黑色,则认为此连通域是黑色连通域,否则为白色联通域,对于黑色联通域我们对其进行白色填充处理,对于白色联通域则保持不变。

微信扫码关注我们:跟着数理化走天下

获得更多的信息哦,一起交流,一起成长哦:微信号:跟着数理化走天下,纯属个人的交流,无盈利目的

opencv删除小连通区域(轮廓)---iplImage版本相关推荐

  1. 【小知识】opencv里去掉小连通区域的函数remove_small_objects()解析

    网上搜了好多都没有详细的解释函数里面参数的,参考的python数字图像处理(18):高级形态学处理,码下来省得以后再找了. 有些时候,我们只需要一些大块区域,那些零散的.小块的区域,我们就需要删除掉, ...

  2. 图片连通区域检测(Label connected regions)与去除小连通区域(remove small regions)

    图片连通区域检测(Label connected regions of an integer array) 更多关注: https://github.com/chanhal https://www.z ...

  3. OpenCV使用小札记-Cvmat与IplImage的相互转换

    1.IplImage转Cvmat IplImage* src = cvLoadImage("rice.bmp",0);     CvMat* mat=cvCreateMat(src ...

  4. Java+opencv3.2.0之删除最小连通区域

    吐槽一下,在网上查了半天opencv3关于删除最小连通区域的方法,结果还是没找到,就自己写了一个,效果还可以,就发出来和大家分享一下. 思路: 1.遍历所有像素点 2.每遍历到一个黑点就去判断是否为连 ...

  5. opencv(十三)-快速连通区域分析

    索引目录 1.连通区域标记算法 2.剔除小连通区域 参考 1.连通区域标记算法 连接区域标记算法(connected component labeling algorithm)是图像分析中最常用的算法 ...

  6. ViSP学习笔记(十四):连通区域跟踪

    开发环境:Ubuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyge ...

  7. 让书和背景分离/去除大区域中小的连通区域(python实现)

    删除小块区域 有些时候,我们只需要一些大块区域,那些零散的.小块的区域,我们就需要删除掉, 则可以使用morphology子模块的remove_small_objects函数. 让书和背景分离 对图片 ...

  8. OpenCV删除面积小的区域 实现图像二值化分割 标记连通区域

    OpenCV删除面积小的区域 实现图像二值化分割 标记连通区域    [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/781 ...

  9. OpenCV编程案例:使用轮廓函数检测连通区域

    转自:http://www.aiseminar.cn/bbs/thread-617-1-1.html 此案例位于CXCORE中cvDrawContours函数介绍部分给出.此程序首先载入一个二值图像文 ...

最新文章

  1. C#和Sql Server 2005中时间的最大值和最小值
  2. 推荐JQuery学习简介
  3. [转]NUnit详细使用方法
  4. 介绍一个 Windows 10 资源管理器的替代工具 - Explorer++
  5. 与台风相伴,他们是前行的逆风者
  6. Android配置模拟器参数,夜神模拟器支持命令行参数列表
  7. 采购季:云服务不断进化为企业带来更多选择
  8. 在线短视频缩略图剪切工具
  9. windows系统bat批处理 mysql 脚本启动关闭
  10. 【优化算法】杂草优化算法(IWO)【含Matlab源码 1076期】
  11. access mysql 操作方法_设置和取消Access数据库密码-图解教程
  12. 怎么看java源代码
  13. SecondCopy 2000 简单说明
  14. 计算机鼠标不灵活怎么办,鼠标左键不灵敏,教您鼠标左键不灵敏怎么办
  15. 忘记背后 努力面前 向着标杆直跑!(转)
  16. HTML Responsive Web Page
  17. 18在protel DXP中PCB图中给电路板绘制边框、安装孔的方法介绍成都电路板设计
  18. python32位和64位有什么区别_python32位和64位的区别是什么
  19. 透彻理解位图与矢量图的本质区别(小包子觉得讲的很清晰)
  20. 20141115 【 Arduino - LM35 - 4位八段数码管 】 数码管显示温度

热门文章

  1. 仿爱奇艺UI界面(第一天)
  2. 20道HTML基础面试题(附答案)
  3. 树莓派体验13 - 树莓派3B板载wifi配置方法
  4. 真实评测 i7 12700f和i7 12700kf区别 i712700f和i712700kf差多少
  5. numpy的astype函数
  6. 跨vlan通信之vlanif配置-华为ensp
  7. (17)Redis 服务器
  8. 怎样用matlab实现图像的缩放,matlab实现图像缩放
  9. JavaScript我的第n+1次学习
  10. 练习:1的1次幂+2的2次幂+.......n的n次幂的值