0

我想使用 JAVA 语言提取 jpeg 图像的像素值,并且需要将其存储在 array(bufferdArray) 中以便进一步操作。那么我如何从 jpeg 图像格式中提取像素值呢?

4

3 回答 3

1

看看 BufferedImage.getRGB()。

这是一个精简的说明示例,说明如何拆分图像以对像素进行条件检查/修改。根据需要添加错误/异常处理。

public static BufferedImage exampleForSO(BufferedImage image) {
BufferedImage imageIn = image;
BufferedImage imageOut = 
new BufferedImage(imageIn.getWidth(), imageIn.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
int width = imageIn.getWidth();
int height = imageIn.getHeight();
int[] imageInPixels = imageIn.getRGB(0, 0, width, height, null, 0, width);
int[] imageOutPixels = new int[imageInPixels.length];
for (int i = 0; i < imageInPixels.length; i++) {
    int inR = (imageInPixels[i] & 0x00FF0000) >> 16;
    int inG = (imageInPixels[i] & 0x0000FF00) >> 8;
    int inB = (imageInPixels[i] & 0x000000FF) >> 0;

    if (  conditionChecker_inRinGinB  ){
        // modify
    } else {
        // don't modify
    }

}
imageOut.setRGB(0, 0, width, height, imageOutPixels, 0, width);
return imageOut;
}
于 2012-04-04T22:46:43.857 回答
0

将 JPEG 转换为 java 可读对象的最简单方法如下:

BufferedImage image = ImageIO.read(new File("MyJPEG.jpg"));

BufferedImage 提供了在图像中的确切像素位置(XY 整数坐标)获取 RGB 值的方法,因此您可以自己决定如何将其存储在一维数组中,但这就是要点.

于 2012-04-04T22:04:59.440 回答
0

有一种方法可以获取缓冲图像并将其转换为整数数组,其中数组中的每个整数代表图像中像素的 rgb 值。

int[] pixels = ((DataBufferInt)image.getRaster().grtDataBuffer()).getData();

有趣的是,当整数数组中的一个元素被编辑时,图像中对应的像素也是如此。

为了从一组 x 和 y 坐标中找到数组中的像素,您将使用此方法。

public void setPixel(int x, int y ,int rgb){
    pixels[y * image.getWidth() + x] = rgb;
}

即使有了坐标的乘法和加法,它仍然比使用 BufferedImage 类中的 setRGB() 方法快。

编辑:另外请记住,图像需要的类型必须是 TYPE_INT_RGB,默认情况下不是。可以通过创建相同尺寸和类型为 TYPE_INT_RGB 的新图像来转换它。然后使用新图像的图形对象将原始图像绘制到新图像上。

public BufferedImage toIntRGB(BufferedImage image){
    if(image.getType() == BufferedImage.TYPE_INT_RGB)
         return image;
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight, BufferedImage.TYPE_INT_RGB);
    newImage.getGraphics().drawImage(image, 0, 0, null);
    return newImage;
}
于 2016-12-06T03:17:22.093 回答