如何使用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);
广告