java - 遍历图像的每个像素

标签 java image image-processing

我最近开始使用 java 处理图像。 我想实现一个基于颜色的基本运动跟踪系统(我知道这不会很有效,但它只是用于测试)。

现在我想用 Java 处理图像。 我想删除 RGB 图像中的所有颜色,而不是删除一种颜色或一系列颜色。

目前我还没有找到好的解决方案。我希望它尽可能简单,并且尽量不要使用除 Java 标准库之外的任何其他库。

最佳答案

使用 BufferedImage(java 中的标准图像类),您有两个“好的”解决方案来访问像素。

1 - 使用栅格更容易,因为它自动处理编码,但速度较慢。

WritableRaster wr = image.getRaster() ;
for (int y=0, nb=0 ; y < image.getHeight() ; y++)
    for (int x=0 ; x < image.getWidth() ; x++, nb++)
        {
        int r = wr.getSample(x, y, 0) ; // You just give the channel number, no need to handle the encoding.
        int g = wr.getSample(x, y, 1) ;
        int b = wr.getSample(x, y, 2) ;
        }

2 - 使用 DataBuffer,速度最快,因为直接访问像素,但您必须处理编码。

switch ( image.getType() )
    {
    case BufferedImage.TYPE_3BYTE_BGR : // Classical color images encoding.
        byte[] bb = ((DataBufferByte)image.getRaster().getDataBuffer()).getData() ;
        for (int y=0, pos=0 ; y < image.getHeight() ; y++)
            for (int x=0 ; x < image.getWidth() ; x++, pos+=3)
                {
                int b = bb[pos] & 0xFF ;
                int g = bb[pos+1] & 0xFF ;
                int r = bb[pos+2] & 0xFF ;
                }
        break ;
    }

getRGB() 很简单,但慢得多,而且并不比光栅更容易,所以禁止它。

关于java - 遍历图像的每个像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196878/

相关文章:

java - 如何在运行时在 JFrame 中添加 JTable?

html - CSS:一条 2 像素的线出现在图像 (IMG) 元素下方?

image - 图像转换滤镜

c# - Mono 2.8.2 和加载 PNG 文件

java - 方法的 JNI 风格签名

java - Maven 依赖项未下载相应的 POM 文件

java - 从 hibernate 状态锁定整个 mysql 数据库

Java:将彩色图像表示为灰度强度值数组

ios - 如何使用 OpenCV 使用洪水填充为摄像机上的墙壁着色?

python - 将黑白图像转换为数字数组?