我使用洪水填充算法對圖像進行排序。如果它遇到相同的顏色,我希望它將該像素複製到一個名爲「填充」的相同大小的數組中。填充的數組然後轉換回圖像並保存爲jpg。但是,當我打開JPG時,它看起來完全是黑色的。使用洪水填充算法創建數組
public static void findFace(int[][] image) throws IOException {
int height = image.length;
int width = image[0].length;
Color centerStart = new Color(image[width/2][height/2]);
int[][] filled = new int[width][height];
floodFill(width/2, height/2, centerStart, image, filled);
//construct the filled array as image. Show if the face was found.
BufferedImage bufferImage2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int Pixel = filled[x][y] << 16 | filled[x][y] << 8 | filled[x][y];
bufferImage2.setRGB(x, y, Pixel);
}
}
//save filled array as image file
File outputfile = new File("/home/lily/Pictures/APicaDay/saved.jpg");
ImageIO.write(bufferImage2, "jpg", outputfile);
}
public static int[][] floodFill(int x, int y, Color targetColor, int[][] image, int[][] filled) {
if (image[x][y] != targetColor.getRGB()) {
return filled;
}
filled[x][y] = image[x][y];
floodFill(x - 1, y, targetColor, image, filled);
floodFill(x + 1, y, targetColor, image, filled);
floodFill(x, y - 1, targetColor, image, filled);
floodFill(x, y + 1, targetColor, image, filled);
return filled;
}
獎金問題:我想洪水填充也承認,類似的顏色,但不完全相同的,因爲我處理的照片。
創建'像素'的位移似乎有點奇怪......如果您有3字節的RGB或int RGB樣本,您似乎還沒有下定決心。也很難知道'int [] []圖像'是什麼。嘗試發佈一個完全可運行但剝離的代碼版本。 – haraldK
另外,你是不是多次覆蓋相同的像素?遞歸似乎有點失控。你還需要邊界檢查。 – haraldK