我想使用 JAVA 语言提取 jpeg 图像的像素值,并且需要将其存储在 array(bufferdArray) 中以便进一步操作。那么我如何从 jpeg 图像格式中提取像素值呢?
问问题
3261 次
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 回答