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();
}
}
}