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

Masking (Lọc) hình ảnh trong OpenCV

Trong các phép toán mask, giá trị mỗi pixel được tính lại dựa trên ma trận mask (kernel). Masking còn gọi là filtering (lọc).

Phương thức filter2D() của lớp Imgproc nhận ma trận nguồn, đích và kernel, thực hiện tích chập. Dùng phương thức này để mask/lọc hình ảnh.

Ví dụ minh họa

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class MaskingExample {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        String file = "D://images//boy.jpg";
        Mat src = Imgcodecs.imread(file);
        Mat dst = new Mat();
        
        // Kernel 1: Sharpening
        Mat kernel1 = new Mat(3, 3, CvType.CV_8S);
        kernel1.put(0, 0, 0, -1, 0, -1, 5, -1, 0, -1, 0);
        
        // Kernel 2: Blur ( trung bình 2x2)
        Mat kernel2 = Mat.ones(2, 2, CvType.CV_32F);
        for (int i = 0; i < kernel2.rows(); i++) {
            for (int j = 0; j < kernel2.cols(); j++) {
                double[] m = kernel2.get(i, j);
                for (int k = 1; k < m.length; k++) {
                    m[k] = m[k] / (2 * 2);
                }
                kernel2.put(i, j, m);
            }
        }
        
        // Lọc với kernel1
        Imgproc.filter2D(src, dst, -1, kernel1);
        HighGui.imshow("Mask Example1", dst);
        
        dst = new Mat();
        
        // Lọc với kernel2
        Imgproc.filter2D(src, dst, -1, kernel2);
        HighGui.imshow("Mask Example2", dst);
        
        HighGui.waitKey();
    }
}

Hình ảnh đầu vào và kết quả

Input: Masking (Lọc) hình ảnh trong OpenCV

Kernel1 (Sharpen): Masking (Lọc) hình ảnh trong OpenCV

Kernel2 (Blur): Masking (Lọc) hình ảnh trong OpenCV