在网上搜了好多都没有特别使用的,java实现imfill的算法,有一些关于opencv的,但是作为一枚初学菜鸟,还是很难搞懂的,直入主题吧

算法设计思路

(1)输入一张二值图像(很多看似黑白的图像并不完全是黑白的,当然在此做了处理)
(2)将图像RGB值保存到一个二维数组中,例如 imageColor[i][j] = 0xFFFF00FF;
(3)对得到的二维数组进行处理,逻辑如下:
根据像素之间关系可以将一个像素理解为被八个像素包裹的像素,即matlab中imFill的所谓八连通处理,和四连通处理,此处为四连通处理
对某一个像素的上下左右四个方向进行遍历,遍历的长度是有一定要求的,根据需求而定,如果四个方向在遍历区域内都有白色出现,则将其赋值为白色,从而实现对图像的简单填充处理,
(4)创建图像缓冲区BufferedImage,存储相应像素矩阵


源码如下:

imfill实现类:

package java二值图像填充;import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;public class imfll {BufferedImage grayImage;BufferedImage imfillImage;public imfll(String imFill,Graphics graphics) {// TODO Auto-generated constructor stubint[][] imageColor ;//imageColor = new int[][];try {grayImage = ImageIO.read(new File(imFill));//创建缓冲区imfillImage = new BufferedImage(grayImage.getWidth(),grayImage.getHeight(),grayImage.getType());//像素矩阵imageColor = new int[grayImage.getWidth()][grayImage.getHeight()];for (int i = 0; i < grayImage.getWidth(); i++) {for (int j = 0; j < grayImage.getHeight(); j++) {imageColor[i][j] = grayImage.getRGB(i , j);}}imageColor = imfillImage(15,imageColor);//将像素矩阵赋值到缓冲区相应位置for (int i = 0; i < grayImage.getWidth(); i++) {for (int j = 0; j < grayImage.getHeight(); j++) {imfillImage.setRGB(i, j, imageColor[i][j]);         }}graphics.drawImage(grayImage, 0, 0, 380, 400,null);graphics.drawImage(imfillImage,400,0, 380,400,null);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** 核心算法* * 思路:  根据四连通启发到*  *  判断该像素上下左右四个方向,一定距离上是否都存在白色区域*  如果四个方向都存在,返回此处为白色*/private int[][] imfillImage(int distance, int[][] imageColor) {// TODO Auto-generated method stubint[][] newImageColor;newImageColor = imageColor;int counter;for (int i = distance; i < imageColor.length - distance; i++) {for (int j = distance; j < imageColor[1].length - distance; j++) {counter = 0;            //上for (int k1 = 0; k1 < distance; k1++) {if (imageColor[i-k1][j] > 0xffaa0000) {counter++;break;}}//左for (int k1 = 0; k1 < distance; k1++) {if (imageColor[i][j-k1] > 0xffaa0000) {counter++;break;}}   //下for (int k1 = 0; k1 < distance; k1++) {if (imageColor[i+k1][j] > 0xffaa0000) {counter++;break;}}   //右for (int k1 = 0; k1 < distance; k1++) {if (imageColor[i][j+k1] > 0xffaa0000) {counter++;break;}}if (counter == 4)  newImageColor[i][j] = 0xffffffff;}//for (int j = 0; j < imageColor[1].length; j++)}//for (int i = 0; i < imageColor.length; i++)  return newImageColor;}
}

测试类:

package java二值图像填充;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;public class test extends JPanel{public static void main(String[] args) {JFrame mFrame = new JFrame();mFrame.setVisible(true);mFrame.setSize(800, 500);mFrame.add(new test());}@Override   public void paint(Graphics g) {// TODO Auto-generated method stubsuper.paint(g);     imfll mImfll = new imfll("color1.jpg", g);}
}

实现如下图:
将较小的虫洞填充

原创代码,欢迎指点

java图像处理--形态学填充处理imfill相关推荐

  1. MATLAB对图像处理的填充边缘检测轮廓特征提取的imfill函数与bwperim函数

    MATLAB对图像处理的填充边缘检测轮廓特征提取. 主要函数:及其功能说明如下: imfill函数与bwperim函数:* 1.使用边缘检测和形态学检测细胞 此示例说明如何使用边缘检测和基本形态学检测 ...

  2. 形态学填充孔洞的几个问题

    形态学填充孔洞的几个问题 序 最近做文字和数字方面的图像处理,由于字符存在很多孔洞,提取轮廓时需要加上许多条件才能将字符提取出来,而且像"0"这种字符,内外轮廓差不了多少,虽然可以 ...

  3. OpenCV3.2 Java图像处理视频学习教程-贾志刚-专题视频课程

    OpenCV3.2 Java图像处理视频学习教程-2434人已学习 课程介绍         OpenCV3.2 Java图像处理视频培训课程:基于OpenCV新版本3.2.0详细讲述Java Ope ...

  4. java使用itext填充pdf模板,超简单教学,有手就行

    java使用itext填充pdf模板 1.先去建一个Word文件,设置好想要填充的地方,留好位置,设置好下划线 2.将Word另存为pdf 3.打开电脑中的Adobe Acrobat pro DC(这 ...

  5. Java图像处理方面的工具库和开发包

    Java图像处理类库Java Image Filters Java Image Filters 是由 Jhlabs 开发的一组用来处理 Java 图像的类库,提供各种常用的图像处理效果,例如反转色.扭 ...

  6. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理

    java图像处理-(指定区域内)灰度化.透明化(alpha通道)处理 2016年07月25日 21:23:16 阅读数:3944 近日在一家小公司实习,老板要求我写一个图形编辑器,其中涉及到用java ...

  7. java毕业设计——基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码)——医学图像处理系统

    基于java+图像处理技术的医学图像处理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+图像处理技术的医学图像处理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  8. Java图像处理--------RGB调色面板

    Java图像处理--------RGB调色面板 一:概述 因为我们知道颜色是由R.G.B.三种颜色所组成的,那么我们只需要更改这三个的数值.我们就可以实现一个简单的调色面板:以下是代码演示: 二:代码 ...

  9. Java使用Poi填充Word表格模板(图片和文字)

    Java使用Poi填充Word表格模板(图片和文字) **** 由于个人需求需要对表格模板进行操作,所以本文章只对表格进行替换数据操作,没有段落,没有循环遍历,没有延伸!!!!!(后续补充!!!) * ...

最新文章

  1. quartz 分布式_后端必备分布式技术之-调度系统Quartz设计原理
  2. 同步pod时区与node主机保持一致
  3. Excel操作:导出到Excel并下载到web客户端
  4. 学习旧岛小程序 (4)封装api 请求
  5. JavaScript零散知识点总结
  6. 「转型新范式」第四范式2021发布会全程直播倒计时
  7. 回归分析残差不满足正态分布_线性回归思路梳理!精华必看!
  8. php 固定人数拼手气_独立统计在线人数和访问数代码分享(php)
  9. 阿里云服务器一分价钱一分货,切记!
  10. SpringSecurity Filter
  11. prototype的相关注意点
  12. openfire的搭建与运行(转)
  13. JAVAWeb项目 微型商城项目-------(一)项目描述
  14. mysql时间日期函数
  15. Js参数RSA加密传输,jsencrypt.js的使用
  16. java 当前时间 15分钟_怎么用java 获取15分钟以前的时间
  17. 四个简单的步骤告别烦人的flash广告
  18. Java数组:随机排序
  19. 卡斯卡迪亚社区建设者奖:2017年获胜者公布
  20. 太阳电池板特性实验_太阳电池伏安特性的测量

热门文章

  1. 逍遥天龙八部服务器技能修改,泣诉逍遥三大难 技能修改势在必行
  2. Linux查看物理CPU个数、核数、逻辑CPU个数
  3. react项目里如何使用阿里字体图标
  4. 图像处理 真彩色增强
  5. Optimality Gap
  6. CTF之旅WEB篇(4)--NewStarCTF 公开赛IncludeOne详解
  7. 河南师范大学计算机研究生投档线,2020河南师范大学研究生分数线汇总(含2018-2019历年复试)...
  8. 品牌虚拟数字人撞上文旅,数字营销算是被玩明白了!
  9. 扩增子16S/ITS/18S微生物多样性课程更新-机器学习随机森林分析
  10. 【优测干货分享】微信测试工程师手把手教你做弱网络模拟测试