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

Làm thế nào để chuyển đổi một hình ảnh màu sang hình ảnh Sepia bằng cách sử dụng thư viện Java OpenCV?

Thuật toán chuyển đổi hình ảnh có màu sang nâu đỏ -

  • Nhận các giá trị xanh lam xanh đỏ của mỗi pixel

  • Lấy giá trị trung bình của 3 màu này.

  • Xác định các giá trị độ sâu và cường độ (lý tưởng là 20 và 30).

  • Sửa đổi các giá trị dưới dạng -

    • red =red + (độ sâu * 2).

    • Green =xanh lục + chiều sâu.

    • blue =cường độ xanh lam.

  • Đảm bảo rằng các giá trị đã sửa đổi nằm trong khoảng từ 0 đến 255.

  • Tạo giá trị pixel mới từ các màu đã sửa đổi và đặt giá trị mới cho pixel.

Triển khai trong Java

  • Đọc hình ảnh được yêu cầu bằng phương thức ImageIO.read ().

  • Lấy chiều cao và chiều rộng của hình ảnh.

  • Sử dụng các vòng lặp for lồng nhau đi qua từng pixel trong hình ảnh.

  • Nhận giá trị pixel bằng phương thức getRGB ().

  • Tạo đối tượng Màu bằng cách chuyển tham số giá trị pixel được truy xuất ở trên.

  • Nhận các giá trị đỏ, lục, lam từ đối tượng màu bằng cách sử dụng các phương thức getRed (), getGreen () và getBlue () tương ứng.

  • Tính toán các giá trị màu đỏ, xanh lục và xanh lam mới như được chỉ định trong thuật toán.

  • Tạo một pixel mới với các giá trị RGB đã sửa đổi.

  • Đặt (các) giá trị pixel mới bằng phương thức setRGB ().

Ví dụ

import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Color2Sepia {
   public static void main(String args[])throws IOException {
      //Reading the image
      File file= new File("D:\\Images\\cuba.jpg");
      BufferedImage img = ImageIO.read(file);
      for (int y = 0; y < img.getHeight(); y++) {
         for (int x = 0; x < img.getWidth(); x++) {
            //Retrieving the values 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();
            int avg = (red+green+blue)/3;
            int depth = 20;
            int intensity = 30;
            red= avg+(depth*2);
            green = avg+depth;
            blue = avg-intensity;
            //Making sure that RGB values lies between 0-255
            if (red > 255)red = 255;
            if (green > 255)green = 255;
            if (blue > 255)blue = 255;
            if (blue<0)blue=0;
            //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\\sepia_image2.jpg");
      ImageIO.write(img, "jpg", file);
      System.out.println("Done...");
   }
}

Đầu vào

Làm thế nào để chuyển đổi một hình ảnh màu sang hình ảnh Sepia bằng cách sử dụng thư viện Java OpenCV?

Đầu ra

Làm thế nào để chuyển đổi một hình ảnh màu sang hình ảnh Sepia bằng cách sử dụng thư viện Java OpenCV?