Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Lấy giá trị pixel (RGB) của hình ảnh dùng OpenCV Java

Ảnh số lưu dưới dạng mảng 2D pixel. Mỗi pixel chứa alpha, red, green, blue (0-255, 8 bit).

Sắp xếp bộ nhớ 4 byte (phải sang trái): Blue (0-7 bit), Green (8-15), Red (16-23), Alpha (24-31).

Lấy giá trị pixel (RGB) của hình ảnh dùng OpenCV Java

Lấy giá trị ARGB từ ảnh

  1. Duyệt qua từng pixel (lồng vòng for height, width).
  2. Lấy giá trị pixel bằng getRGB().
  3. Tạo đối tượng Color từ pixel.
  4. Lấy R, G, B bằng getRed(), getGreen(), getBlue().

Ví dụ: Lưu RGB vào file

import java.io.File;
import java.io.FileWriter;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class GetPixels {
    public static void main(String[] args) throws Exception {
        FileWriter writer = new FileWriter("D:\\Images\\pixel_values.txt");
        
        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++) {
                int pixel = img.getRGB(x, y);
                Color color = new Color(pixel, true);
                
                int red = color.getRed();
                int green = color.getGreen();
                int blue = color.getBlue();
                
                writer.append(red + ":");
                writer.append(green + ":");
                writer.append(blue + "");
                writer.append("\n");
                writer.flush();
            }
        }
        writer.close();
        System.out.println("RGB values stored in file");
    }
}

Cách thay thế: Dùng bitwise shift

int p = img.getRGB(x, y);
int a = (p >> 24) & 0xff;
int r = (p >> 16) & 0xff;
int g = (p >> 8) & 0xff;
int b = p & 0xff;

Dịch phải đến vị trí bit bắt đầu của từng kênh, sau đó AND với 0xFF để mask lấy 8 bit cuối.