Re: [問題]java做影像處理的參考資料?

看板java作者 (asdf)時間19年前 (2007/03/15 14:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
分享一下過去的經驗 我們的開發環境是Java 1.5,不過重點是要內建ImageIO套件。 接著,第一個步驟是開檔: public static BufferedImage loadJpegImage(String path, String filename) { BufferedImage inBI = null; File orgin; orgin = new File(path + filename); try { inBI = ImageIO.read(orgin); } catch (Exception e) { logger.fatal("JPEG Image Load Fail" + e.toString()); } return inBI; } 利用以上的片段便可以取得一個jpg檔的BufferedImage 第二個動作是讀取影像資訊: BufferedImage 可以利用 int rgb= BufferedImage.getRGB(int x, int y); 取得某個點的RGB值 接著可以將這個int 轉換為Color,利用 Color color=new Color(int rgb); 取得Color 之後便可以利用 Color.getGreen() ,Color.getRed ,Color.getBlue取得各色的成份。 註: 其實也可以利用位元操作直接從int rgb取得各色成份,只是用以上的方式會比較清楚。 轉換灰階: 由於大部分的影像處理都是以灰階影像作為基礎,所以在這邊加上灰階轉換的程式碼。 如果需要將一張BufferedImage轉換為灰階圖只要用以下的程式變可以取得。 public static int[][] bufferedImagetoGrayMatrix(BufferedImage BI) { BufferedImage inBI = BI; int height = inBI.getHeight(); int width = inBI.getWidth(); int[][] outarray = new int[height][width]; int c, green, red, blue; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { c = inBI.getRGB(j, i); red = (c >> 16) & 0xFF; green = (c >> 8) & 0xFF; blue = (c >> 0) & 0xFF; outarray[i][j] = (int) (red * 0.3 + green * 0.6 + blue + 0.1); } } return outarray; } 這邊的轉換公式是用graylevel=0.3R+0.6G+0.1B 如果需要更精細的公式可以自行修改。 如果看懂這個程式,要將rgb color space轉換到其他空間應該都可以自行處理。 寫入檔案: 做完處理,最後應該要把檔案寫回去把,這時候使用以下的程式即可。 public static void saveJpegImage(BufferedImage image,String filename) { File orgin; orgin = new File(filename); try { ImageIO.write(image, "JPG", orgin); } catch (Exception e) { logger.fatal("JPEG Image Save Fail" + e.toString()); } } 以上片段希望有些幫助。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.229.34.77
文章代碼(AID): #15-EHlOA (java)
討論串 (同標題文章)
文章代碼(AID): #15-EHlOA (java)