1. 程式人生 > >軟件杯圖片之背景,格式的轉換

軟件杯圖片之背景,格式的轉換

ont for The 寬高 就是 turn eight code 發現

在這段時間中,我們的軟件杯比賽項目中,我進行了對圖片的處理,盡可能的來實現我們識別的準確性,我的圖片處理總的分為兩個部分:

第一部分:我們把圖片的水印去掉了,由於我們的圖片是.png格式的,他的特點在於,這類圖片是透明背景,字體的顏色是黑色,而水印的顏色是白色,所以我們首先遍歷所有像素,計算一下整張圖的灰度的平均值(grayMean),輪廓顏色較深,灰度值比較小,背景顏色較淺,灰度值較大,加權平均之後總的平均值會比背景的灰度值略低,然後再次遍歷所有像素,並計算每個像素點的灰度,如果其灰度值比grayMean大,則將其alpha值設為0,即完全透明,否則不做處理。

代碼:

public BufferedImage alphaProcess(BufferedImage bufferedImage) {
        
//獲取源圖像的寬高 int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); System.out.println(width+" "+height); //實例化一個同樣大小的圖片,並將type設為 BufferedImage.TYPE_4BYTE_ABGR,支持alpha通道的rgb圖像 BufferedImage resImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
double grayMean = 0; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int rgb = bufferedImage.getRGB(i,j); int r = (0xff&rgb); int g = (0xff&(rgb>>8)); int b = (0xff&(rgb>>16));
//這是灰度值的計算公式 grayMean += (r*0.299+g*0.587+b*0.114); } } //計算平均灰度 grayMean = grayMean/(width*height); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int rgb = bufferedImage.getRGB(i,j); //一個int是32位,java中按abgr的順序存儲,即前8位是alpha,最後8位是r,所以可以通過下面的方式獲取到rgb的值 int r = (0xff&rgb); int g = (0xff&(rgb>>8)); int b = (0xff&(rgb>>16)); double gray = (r*0.299+g*0.587+b*0.114); //如果灰度值大於之前求的平均灰度值,則將其alpha設為0,下面準確寫應該是rgb = r + (g << 8) + (b << 16) + (0 << 24); if (gray>grayMean){ rgb = r + (g << 8) + (b << 16); } resImage.setRGB(i,j,rgb); } } //ok,返回的就是將淺色背景設為透明的BufferedImage了,可以用灰度化裏提到的方式寫成文件 return resImage; }

第二部分為:改變圖片的格式,在進行是被的過程中,我發現當我將.png格式的圖片轉換為.jpg格式圖片後,他的識別正確率是提高的。

代碼:

private static void writeBufferedImage(BufferedImage img,String filePath){
    String format = filePath.substring(filePath.indexOf(‘.‘)+1);
    //獲取圖片格式
    System.out.println(format);
    try {
        ImageIO.write(img,format,new File(filePath));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在經過這兩次的圖片處理後,我們的圖片的識別正確率有很大的提高

結果截圖:

未進行處理之前的圖片:

技術分享圖片技術分享圖片

進行處理之後的圖片:

技術分享圖片技術分享圖片

軟件杯圖片之背景,格式的轉換