亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在java中區分16位和8位grascale圖像

在java中區分16位和8位grascale圖像

鴻蒙傳說 2023-06-28 15:53:46
我正在嘗試讀取 .png 灰度圖像并將灰度值轉換為 double[][]數組。我需要將它們映射到 0 到 1 之間的值。我使用 BufferedImage,并且嘗試找出使用的顏色深度,img.getColorModel().getColorSpace().getType()但返回了 TYPE_5CLR 或 TYPE_6CLR 通用組件顏色空間,這沒有幫助。目前我正在讀取這樣的值:BufferedImage img = null;        try {            img = ImageIO.read(new File(path));        } catch (IOException e) {            return null;        }        double[][] heightmap= new double[img.getWidth()][img.getHeight()];        WritableRaster raster = img.getRaster();        for(int i=0;i<heightmap.length;i++)        {            for(int j=0;j<heightmap[0].length;j++)            {                heightmap[i][j]=((double) raster.getSample(i,j,0))/65535.0;            }        }如果 65535 是 8 位的話,它應該是 256,但我不知道什么時候。
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

我在評論中寫道,您可以使用ColorModel.getNormalizedComponents(...),但由于它使用float值并且不必要的復雜,因此實現這樣的轉換可能會更容易:


BufferedImage img;

try {

    img = ImageIO.read(new File(path));

} catch (IOException e) {

    return null;

}


double[][] heightmap = new double[img.getWidth()][img.getHeight()];


WritableRaster raster = img.getRaster();


// Component size should be 8 or 16, yielding maxValue 255 or 65535 respectively

double maxValue = (1 << img.getColorModel().getComponentSize(0)) - 1;


for(int x = 0; x < heightmap.length; x++) {

    for(int y = 0; y < heightmap[0].length; y++) {

        heightmap[x][y] = raster.getSample(x, y, 0) / maxValue;

    }

}


return heightmap;

請注意,上面的代碼僅適用于灰度圖像,但這似乎是您的輸入。所有顏色分量的分量大小可能相同 ( getComponentSize(0)),但 R、G 和 B(以及 A,如果有 alpha 分量)可能有單獨的樣本,并且代碼將僅獲取第一個樣本 ( getSample(x, y, 0)) 。


xPS:為了清楚起見,我重命名了你的變量y。x如果交換高度圖中的尺寸并在內循環中循環,則很可能會獲得更好的性能,而不是y由于更好的數據局部性。


查看完整回答
反對 回復 2023-06-28
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

如果您假設圖像是灰度圖像,則調用getRGB并除以其分量之一可能會更容易:

heightmap[i][j]?=?(img.getRGB(j,?i)?&?0xff)?/?255.0;


查看完整回答
反對 回復 2023-06-28
  • 2 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號