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

Cách chuyển đổi hình ảnh âm bản (negative) sang dương bản (positive) bằng Java OpenCV


Để chuyển đổi hình ảnh âm bản sang dương bản:

  1. Đọc hình ảnh bằng ImageIO.read().
  2. Lấy chiều cao và chiều rộng.
  3. Dùng vòng lặp for lồng nhau duyệt qua từng pixel.
  4. Lấy giá trị pixel bằng getRGB().
  5. Để lấy từng giá trị từ pixel, cần dịch phải (right shift) đến vị trí bắt đầu của mỗi màu: 24 cho alpha, 16 cho đỏ, 8 cho xanh lá, 0 cho xanh dương, và thực hiện phép AND bitwise với 0xFF. Điều này lọc lấy 8 bit cuối và bỏ qua các bit còn lại.
  6. Tính giá trị đỏ, xanh lá, xanh dương mới bằng cách trừ chúng từ 255.
  7. Tái tạo pixel bằng cách dịch trái (left shift) ARGB về vị trí tương ứng và nối bằng OR bitwise.
  8. Gán giá trị pixel mới bằng setRGB().

Ví dụ

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

public class Negative2Color {
public static void main(String args[]) throws IOException {
// Đọc hình ảnh
File file = new File("D:\\Images\\cat_neg.jpg");
BufferedImage img = ImageIO.read(file);
for (int y = 0; y < img.getHeight(); y++) {
for (int x = 0; x < img.getWidth(); x++) {
// Lấy nội dung của một pixel
int p = img.getRGB(x, y);
// Lấy giá trị A R G B từ giá trị pixel
int a = (p >> 24) & 0xff;
int r = (p >> 16) & 0xff;
int g = (p >> 8) & 0xff;
int b = p & 0xff;
// Trừ RGB từ 255
r = 255 - r;
g = 255 - g;
b = 255 - b;
// Gán giá trị RGB mới
p = (a << 24) | (r << 16) | (g << 8) | b;
img.setRGB(x, y, p);
}
}
// Lưu hình ảnh đã chỉnh sửa
file = new File("D:\\Images\\negative_positive.jpg");
ImageIO.write(img, "jpg", file);
System.out.println("Hoàn tất...");
}
}

Ảnh đầu vào

Cách chuyển đổi hình ảnh âm bản (negative) sang dương bản (positive) bằng Java OpenCV

Ảnh đầu ra

Cách chuyển đổi hình ảnh âm bản (negative) sang dương bản (positive) bằng Java OpenCV