Java 对二值化图片识别连通域
用Java 对 已经 二值化了的图片 标记连通域
每块的连通域都标记不一样的数字
public static void main(String [] args) throws IOException {
//二值化
BufferedImage image = ImageIO.read(new File("F:/MyCode/LianTongYu/specialGray.jpg"));
int w = image.getWidth();
int h = image.getHeight();
int rgb = image.getRGB(0, 0);
int arr[][] = new int[h][w];
// 获取图片每一像素点的灰度值
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
// getRGB()返回默认的RGB颜色模型(十进制)
// arr[i][j] = image.getRGB(i, j) == -1 ?0 : 1 ;//该点的灰度值
int tmp= image.getRGB(j, i);
arr[i][j] =tmp==-1? 0:1;
}
}
int res=getCount(arr);
System.out.println(res);
}
public static int getCount(int[][] A) {
int result = 0;
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < A[0].length; j++) {
if (A[i][j] == 1) {
result++;
erase(A, i, j,result+1);
}
}
}
// 统计数值
int arrsum[] = new int [result+2];
// 读取矩阵
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < A[0].length; j++) {
if(A[i][j]!=0)
arrsum[A[i][j]]+=1;
System.out.print(A[i][j]+" ");
}
System.out.println();
}
//输出统计的数值
for (int i = 0; i < arrsum.length; i++) {
System.out.println(arrsum[i]);
}
return result;
}
public static void erase(int[][] A, int i, int j,int res1) {
A[i][j] = res1;
while (i - 1 >= 0 && A[i - 1][j] == 1) {
erase(A, i - 1, j,res1);
}
while (i + 1 < A.length && A[i + 1][j] == 1) {
erase(A, i + 1, j,res1);
}
while (j - 1 >= 0 && A[i][j - 1] == 1) {
erase(A, i, j - 1,res1);
}
while (j + 1 < A[0].length && A[i][j + 1] == 1) {
erase(A, i, j + 1,res1);
}
}
}
图片:

结果:

@_@
Java 对二值化图片识别连通域的更多相关文章
- python图片二值化提高识别率
import cv2from PIL import Imagefrom pytesseract import pytesseractfrom PIL import ImageEnhanceimport ...
- 基于Java对图片进行二值化处理
一直以来对Java的图形处理能力表无力,但好像又不是那么一回事,之前用PHP做过一些应用,涉及到验证码的识别,其中有个图片二值化的步骤,今天换成Java来实现下 在java的扩展包javax.imag ...
- [置顶] c#验证码识别、图片二值化、分割、分类、识别
c# 验证码的识别主要分为预处理.分割.识别三个步骤 首先我从网站上下载验证码 处理结果如下: 1.图片预处理,即二值化图片 *就是将图像上的像素点的灰度值设置为0或255. 原理如下: 代码如下: ...
- atitit.验证码识别step4--------图形二值化 灰度化
atitit.验证码识别step4--------图形二值化 灰度化 1. 常见二值化的方法原理总结 1 1.1. 方法一:该方法非常简单,对RGB彩色图像灰度化以后,扫描图像的每个像素值,值小于12 ...
- python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)
############################################################################################# ###### ...
- [转载+原创]Emgu CV on C# (四) —— Emgu CV on 全局固定阈值二值化
重点介绍了全局二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数) 1.概述 图像二值化是图像处理中的一项基本技术,也 ...
- Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)
7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...
- java 图像灰度化与二值化
转载:http://www.chinasb.org/archives/2013/01/5053.shtml 1: package org.chinasb.client; 2: 3: import ja ...
随机推荐
- 菜鸟之旅——初识.NET
入坑.Net 也已经两年多了,既然在微软.Net 体系下混,对.Net 体系也需要了解一下,当然这些知识也都是查阅资料都能够查到的,这里主要是对自己所学的整理,况且最近的学习有些闭门造车的味道,现在想 ...
- MySQL查询(进阶)(每个标点都是重点)
MySQL 是工作中很普遍的需要用到的,所以必须掌握,而 之前我们一直说的都是怎么存. 你只会存不会取有个屁用.所以希望大家在如何查询读取数据这方面多下点功夫. 这篇和上一篇都是干货,我也是第一次学. ...
- DevOps/TestOps概念
天下大势分久必合合久必分,早期的软件开发只有软件工程师一人完成,为了提高效率逐渐实行分工模式:开发.测试.运维.不同角色担任不同的任务.分工越来越细之后带来了问题也越来越突出,那就是各角色之间的沟通成 ...
- MySQL优化二 缓存参数优化
数据库属于 IO密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数 ...
- CSS3 美女动画相框
把下面的内容放到一个body内,运行看一看:) <style> *{ margin:0; padding:0;} .bg1{ background-image:-moz-linear-gr ...
- 公众号的Markdown排版利器:Md2All
微信公众号:颜家大少如有问题或建议,请公众号留言 本文所用排版工具:Md2All,http://md.aclickall.com 公众号排版工具 公众号的排版编辑工具还真的不少,但功能大同小异,大部分 ...
- Micropython实例之TPYBoard来电显示功能演示
一.TPYBoardV702介绍 TPYBoardV702是目前市面上唯一支持通信通信功能的MicroPython开发板:支持Python3.0及以上版本直接运行.支持GPS+北斗双模通信.GPRS通 ...
- 大话python模块与包
前言 眼看着老掌门年纪越来越大,掌门之位的传承也成了门派中的一件大事.这天,老掌门把小掌门叫到跟前,语重心长地说道:孩子啊,以后你就要继任掌门之位了,我就传授此生所学的绝世功法与你,以后可要悉心学习, ...
- 【转载】小结一下linux 2.6内核的四种IO调度算法
在LINUX 2.6中,有四种关于IO的调度算法,下面综合小结一下: 1) NOOP NOOP算法的全写为No Operation.该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺 ...
- Android数据库之判断表是否存在
Android开发的时候我们可能会用到它的本地数据库,在使用的时候有可能我们已经储存了数据了,但是,我们的表已经创建了,里面有数据,我们要怎么判断表是否已经创建可能就需要琢磨一下. 以下便是利用了,查 ...