Java DIP - Chuyển đổi không gian màu OpenCV
Để thay đổi không gian màu của hình ảnh này sang hình ảnh khác bằng OpenCV, chúng tôi đọc hình ảnh thành BufferedImage và chuyển nó thành MatVật. Cú pháp của nó được đưa ra dưới đây:
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.
OpenCv cho phép nhiều kiểu chuyển đổi màu sắc, tất cả đều có thể tìm thấy trong lớp Imgproc. Một số loại được mô tả ngắn gọn -
Sr.No. | Loại chuyển đổi màu |
---|---|
1 | COLOR_RGB2BGR |
2 | COLOR_RGB2BGRA |
3 | COLOR_RGB2GRAY |
4 | COLOR_RGB2HLS |
5 | COLOR_RGB2HSV |
6 | COLOR_RGB2Luv |
7 | COLOR_RGB2YUV |
số 8 | COLOR_RGB2Lab |
Từ bất kỳ loại chuyển đổi màu nào, chỉ cần chuyển loại thích hợp vào phương thức cvtColor() bên trong Imgproclớp học. Cú pháp của nó được đưa ra dưới đây:
Imgproc.cvtColor(source mat, destination mat1, Color_Conversion_Code);
Phương pháp cvtColor() lấy ba tham số là ma trận ảnh nguồn, ma trận ảnh đích và kiểu chuyển đổi màu.
Ngoài phương thức cvtColor (), còn có các phương thức khác được cung cấp bởi lớp Imgproc. Chúng được mô tả ngắn gọn -
Sr.No. | Phương pháp & Mô tả |
---|---|
1 |
cvtColor(Mat src, Mat dst, int code, int dstCn) Nó chuyển đổi một hình ảnh từ không gian màu này sang không gian màu khác. |
2 |
dilate(Mat src, Mat dst, Mat kernel) Nó làm giãn hình ảnh bằng cách sử dụng một phần tử có cấu trúc cụ thể. |
3 |
equalizeHist(Mat src, Mat dst) Nó cân bằng biểu đồ của một hình ảnh thang độ xám. |
4 |
filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta) Nó biến đổi một hình ảnh với hạt nhân. |
5 |
GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Nó làm mờ hình ảnh bằng cách sử dụng bộ lọc Gaussian. |
6 |
integral(Mat src, Mat sum) Nó tính tích phân của một hình ảnh. |
Thí dụ
Ví dụ sau minh họa việc sử dụng lớp Imgproc để chuyển đổi hình ảnh từ không gian màu này sang không gian màu khác.
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.File;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ) {
try {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(),image.getWidth(), CvType.CV_8UC3);
mat.put(0, 0, data);
Mat mat1 = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2HSV);
byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);
File ouptut = new File("hsv.jpg");
ImageIO.write(image1, "jpg", ouptut);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Đầu ra
Khi bạn thực hiện ví dụ đã cho, nó sẽ chuyển đổi tên hình ảnh digital_image_processing.jpg vào hình ảnh không gian màu HSV tương đương của nó và ghi nó vào đĩa cứng với tên hsv.jpg.