java 细化_按照索引的细化提取骨架算法的java实现

packagecom.ocr.imgocr;importjava.awt.Color;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;public classThin {//索引数组

private static Integer[] array = {0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0};public static boolean isWhite(intcolorInt) {

Color color= newColor(colorInt);if (color.getRed() + color.getGreen() + color.getBlue() > 400) {return true;

}return false;

}public staticBufferedImage VThin(BufferedImage image,Integer[] array){int h =image.getHeight();int w =image.getWidth();int NEXT = 1;for(int i=0;i

NEXT= 1;

}else{intM ;if( 0

if(isBlack(image.getRGB(j-1,i))&&isBlack(image.getRGB(j,i))&&isBlack(image.getRGB(j+1,i))){

M=0;

}else{

M=1;

}

}else{

M= 1;

}if(isBlack(image.getRGB(j,i))&&M!=0){

int[] a = {0,0,0,0,0,0,0,0,0};for(int k=0;k<3;k++){for(int l=0;l<3;l++){if ((-1

a[k*3+l] = 1;

}

}

}int sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128;if(array[sum]==0){

image.setRGB(j, i, Color.black.getRGB());

}else{

image.setRGB(j, i, Color.white.getRGB());

}if (array[sum] == 1){

NEXT= 0;

}

}

}

}

}returnimage;

}public staticBufferedImage HThin(BufferedImage image,Integer[] array){int h =image.getHeight();int w =image.getWidth();int NEXT = 1;for(int j=0;j

NEXT= 1;

}else{intM;if(0

if(isBlack(image.getRGB(j,i-1))&&isBlack(image.getRGB(j,i))&&isBlack(image.getRGB(j,i+1))){

M=0;

}else{

M=1;

}

}else{

M= 1;

}if (isBlack(image.getRGB(j,i)) && M != 0){int[] a = {0,0,0,0,0,0,0,0,0};for(int k=0;k<3;k++){for(int l=0;l<3;l++){if ((-1

a[k*3+l] = 1;

}

}

}int sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128;if(array[sum]==0){

image.setRGB(j, i, Color.black.getRGB());

}else{

image.setRGB(j, i, Color.white.getRGB());

}if (array[sum] == 1){

NEXT= 0;

}

}

}

}

}returnimage;

}public staticBufferedImage Xihua(BufferedImage image,Integer[] array){int num=10;

BufferedImage iXihua =image;for(int i=0;i

VThin(iXihua,array);

HThin(iXihua,array);

}returniXihua;

}public staticBufferedImage Two(BufferedImage image){int w =image.getWidth();int h =image.getHeight();

BufferedImage iTwo=image;for(int i=0;i

iTwo.setRGB(j, i, Color.BLACK.getRGB());

}else{

iTwo.setRGB(j, i, Color.WHITE.getRGB());

}

}

}returniTwo;

}public static boolean isBlack(intcolorInt) {

Color color= newColor(colorInt);if (color.getRed() + color.getGreen() + color.getBlue() <= 400) {return true;

}return false;

}public static voidmain(String[] args) {try{//原始图片路径

BufferedImage image = ImageIO.read(new File("image"+File.separator+"0.jpg"));//二值化

BufferedImage iTwo =Two(image);

ImageIO.write(iTwo,"jpg", new File("image"+File.separator+"two.jpg"));//细化

BufferedImage iThin =Xihua(image,array);

ImageIO.write(iThin,"jpg", new File("image"+File.separator+"thin.jpg"));

}catch(IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值