Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để lấy pixel (giá trị RGB) của hình ảnh bằng thư viện Java OpenCV?


Hình ảnh kỹ thuật số được lưu trữ dưới dạng mảng pixel 2D và pixel là phần tử nhỏ nhất của hình ảnh kỹ thuật số.

Mỗi pixel chứa các giá trị alpha, đỏ, lục, lam và giá trị của mỗi màu nằm trong khoảng từ 0 đến 255, tiêu thụ 8 bit (2 ^ 8).

Các giá trị ARGB được lưu trữ trong 4 byte bộ nhớ theo cùng một thứ tự (từ phải sang trái) với giá trị màu xanh lam ở 0-7 bit, giá trị màu xanh lục ở 8-15 bit, giá trị màu đỏ ở 16-23 bit và alpha ở 24-31 bit.

Làm cách nào để lấy pixel (giá trị RGB) của hình ảnh bằng thư viện Java OpenCV?

Truy xuất nội dung pixel (giá trị ARGB) của hình ảnh -

Để nhận các giá trị pixel từ hình ảnh -

  • Lặp qua từng pixel trong hình ảnh. tức là chạy các vòng lặp lồng nhau theo chiều cao và chiều rộng của hình ảnh.

  • Nhận giá trị pixel tại mọi điểm bằng phương thức getRGB ().

  • Khởi tạo đối tượng Màu bằng cách chuyển giá trị pixel làm tham số.

  • Nhận các giá trị Red, Green, Blue bằng cách sử dụng các phương thức getRed (), getGreen () vàgetBlue () tương ứng.

Ví dụ

Sau java, ví dụ đọc nội dung của mỗi pixel của hình ảnh và ghi các giá trị RGB vào một tệp -

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");
      //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();
            writer.append(red+":");
            writer.append(green+":");
            writer.append(blue+"");
            writer.append("\n");
            writer.flush();
         }
      }
      writer.close();
      System.out.println("RGB values at each pixel are stored in the specified file");
   }
}

Đầu ra

RGB values at each pixel are stored in the specified file

Bạn cũng có thể truy xuất các giá trị RGB từ một pixel bằng cách sử dụng các toán tử shift -

Để làm như vậy -

  • Phải, chuyển sang vị trí bắt đầu của mỗi màu, tức là 24 cho alpha 16 cho màu đỏ, v.v.

  • Thao tác shift bên phải có thể ảnh hưởng đến các giá trị của các kênh khác, để tránh điều này, bạn cần thực hiện theo chiều dọc và thao tác với 0Xff. Điều này che dấu biến để lại 8 bit cuối cùng và bỏ qua tất cả các bit còn lại.

int p = img.getRGB(x, y);
//Getting the A R G B values from the pixel value
int a = (p>>24)&0xff;
int r = (p>>16)&0xff;
int g = (p>>8)&0xff;
int b = p&0xff;