Java DIP - Chuyển đổi OpenCV GrayScale
Để chuyển đổi hình ảnh màu sang hình ảnh Thang độ xám 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.
Sau đó, bạn có thể chuyển đổi hình ảnh từ định dạng RGB sang Grayscale bằng phương pháp 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, Imgproc.COLOR_RGB2GRAY);
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 liệt kê dưới đây -
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 depth, 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 một hình ảnh sang Grayscale:
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_8UC1);
Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2GRAY);
byte[] data1 = new byte[mat1.rows() * mat1.cols() * (int)(mat1.elemSize())];
mat1.get(0, 0, data1);
BufferedImage image1 = new BufferedImage(mat1.cols(),mat1.rows(), BufferedImage.TYPE_BYTE_GRAY);
image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);
File ouptut = new File("grayscale.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 Grayscale tương đương của nó và ghi nó trên đĩa cứng với tên grayscale.jpg.