当前位置: 首页 > 知识库问答 >
问题:

灰度位图到二维数组

盖翰池
2023-03-14

大家好,我有问题在灰度bmp图像转换成整数2D数组(值0-255)在Java。

我有一个pmb图像,可以被看作一个整数(0-255)2D数组,我想在Java数据结构中看到这个2D数组

我试着这样做:

Image image = ImageIO.read(new File("my_img.bmp"));
BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_BYTE_GRAY);
Graphics g = img.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();

然后使用我的BufferedImage我创建int[][]这样:

int w = img.getWidth();
int h = img.getHeight();

int[][] array = new int[w][h];
for (int j = 0; j < w; j++) {
    for (int k = 0; k < h; k++) {
        array[j][k] = img.getRGB(j, k);
    }
}

但是现在所有的2D数组都充满了像“-9211021”或类似的数字。

我认为问题在getRGB(j,k)中,但我不知道是否有可能解决它。

编辑:

我知道RGB不是灰度的,那么如何从灰度缓冲图像中获取单个像素的灰度值呢?

共有2个答案

宋新知
2023-03-14

您可以使用Catalano框架。包含多个用于图像处理的过滤器。

http://code.google.com/p/catalano-framework/

详细信息:这比使用WritableRaster更快。

FastBitmap fb = new FastBitmap(bufferedImage);

int[][] image = new int[fb.getHeight()][fb.getWidth];
fb.toArrayGray(image);

//Do manipulations with image
//...

//Place the image into fastBitmap
fb.arrayToImage(image);

//Retrieve in bufferedImage if you desire.
bufferedImage = fb.toBufferedImage();
轩辕乐邦
2023-03-14

在灰度图像中,BufferedImage.getPixel(x, y)不会给出[0-255]范围内的值。相反,它返回RGB颜色空间中灰度级(强度)的相应值。这就是为什么您会得到像“-9211021”这样的值。

以下代码片段应该可以解决您的问题:

Raster raster = image.getData();
for (int j = 0; j < w; j++) {
    for (int k = 0; k < h; k++) {
        array[j][k] = raster.getSample(j, k, 0);
    }
}

其中image是创建的BuffereImage。getSample中的0表示我们正在访问第一个字节/频带(将其设置为更大的值将在灰度图像中引发ArrayOutOfBoundException)。

 类似资料:
  • 我使用以下代码来获取灰度图像的R、G、B值(它们都将是相同的),但输出给我负值。 为什么会这样?我完全糊涂了。 此处,结果[1]应对应于“R”值。那幺它怎么会是负面的呢?

  • 我是第一次使用openCV。我正在使用openCV3和XCode对其进行编码。我想创建一个16位的灰度图像,但我想我有的数据是这样定义的,4000是像素值为白色和0为黑色。我在int类型的数组中有这些像素的信息。如何创建Mat并将数组中的值分配给Mat?

  • 上一节课讲解了纹理贴图的知识点,本节课通过一个把彩色图处理为灰度图的案例进一步认识可编程片元着色器和逐片元的概念。 纹理贴图可以经过渲染管线处理后映射到三维空间中顶点坐标定义的位置,在这个过程中,执行方法texture2D()提取的像素值直接赋值给片元,存入帧缓存的颜色缓冲区中, 显示系统扫描颜色缓冲区中的像素值显示在屏幕上。渲染过线的片元着色器是可编程的,可以执行着色器语言编写的程序,也就是说可

  • 问题内容: 如果不知道该如何获取数组的第二维?仅给出第一维度。 例如,在 如何获得的第二维的值,即3。 谢谢 问题答案: 哪 三个? 您已经创建了一个多维数组。是一个int数组的数组;您有两个长度为三的数组。 会给你第一个数组的长度。 另外值得注意的是,您不必像以前那样初始化多维数组,这意味着所有数组的长度不必相同(或根本不存在)。

  • 本文向大家介绍Python图像灰度变换及图像数组操作,包括了Python图像灰度变换及图像数组操作的使用技巧和注意事项,需要的朋友参考一下 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量、矩阵、图像等)以及线性代数函数。 数组对象可以实现数组

  • 主要内容:示例可以使用上一章中提到的相同方法将灰度图像转换为二进制图像。只需传递一个灰度图像的路径作为这个程序的输入。 示例 以下程序演示如何将灰度图像转为二进制图像读取并使用JavaFX窗口显示。 假定以下是上述程序中指定的输入图像。 输出图像,在执行程序时,将得到以下输出。