如何使用Java OpenCV库设置/修改图像的像素(RGB值)?


像素是数字图像中最小的元素,每个像素包含alpha、红色、绿色、蓝色值的数值。像素值存储在32位内存空间中,按顺序保存ARGB值(每个8位)。因此,要修改图像的颜色 -

  • 您需要遍历图像中的每个像素。

  • 使用getRGB()方法获取像素值。

  • 从像素值中检索ARGB值。

  • 对RGB值执行所需的修改。

  • 使用修改后的RGB值创建新的像素值。

  • 使用setRGB()方法设置新的像素值。

设置ARGB值 -

通过将像素值作为参数传递来实例化Color对象。分别使用getRed()、getGreen()和getBlue()方法获取红色、绿色、蓝色值。修改后,将值设置回 -

  • 创建一个Color对象,并通过新的RGB值作为参数。

  • 使用Color类的getRGB()方法从颜色对象获取像素值。

  • 通过将x和y位置以及新的像素值传递给setRGB()方法,将新的像素值设置为图像。

示例

import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class SetPixels {
   public static void main(String args[])throws IOException {
      //Reading the image
      File file= new File("D:\Images\cat.jpg");
      BufferedImage img = ImageIO.read(file);
      for (int y = 0; y < img.getHeight(); y++) {
         for (int x = 0; x < img.getWidth(); x++) {
            //Retrieving contents of a pixel
            int pixel = img.getRGB(x,y);
            //Creating a Color object from pixel value
            Color color = new Color(pixel, true);
            //Retrieving the R G B values
            int red = color.getRed();
            int green = color.getGreen();
            int blue = color.getBlue();
            //Modifying the RGB values
            green = 150;
            blue = 150;
            //Creating new Color object
            color = new Color(red, green, blue);
            //Setting new Color object to the image
            img.setRGB(x, y, color.getRGB());
         }
      }
      //Saving the modified image
      file = new File("D:\Images\setting_pixels.jpg");
      ImageIO.write(img, "jpg", file);
      System.out.println("Done...");
   }
}

输入

输出

使用移位运算符设置ARGB值 -

要从像素中检索每个值,您需要将其右移到每个颜色的起始位置,即alpha为24,红色为16,依此类推,并与0Xff执行按位与运算。这将掩盖变量,只保留最后8位,并忽略所有其他位。

您可以通过将ARGB向左移到它们各自的位置,并使用按位或运算将它们组合起来,来重建像素。

//Set new RGB value
p = (a<<24) | (r<<16) | (g<<8) | b;
img.setRGB(x, y, p);

更新于: 2020年4月8日

4K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告