Trong các phép toán mặt nạ, giá trị của mỗi pixel của hình ảnh được tính toán lại dựa trên ma trận mặt nạ đã cho, đây được gọi là hạt nhân. Mặt nạ còn được gọi là lọc.
filter2D () phương pháp của Imgproc lớp chấp nhận một ma trận nguồn, đích và hạt nhân và chuyển ma trận nguồn với ma trận hạt nhân. Sử dụng phương pháp này, bạn có thể che hoặc lọc hình ảnh.
Ví dụ
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 ) { //Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); //Reading the input image String file = "D://images//boy.jpg"; Mat src = Imgcodecs.imread(file); //Creating an empty matrix to store the result Mat dst = new Mat(); //Creating kernel1 Mat kernel1 = new Mat(3, 3, CvType.CV_8S); int row = 0, col = 0; kernel1.put(row, col, 0, -1, 0, -1, 5, -1, 0, -1, 0); //Creating kernel2 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); } } //Filtering the image using kernel1 Imgproc.filter2D(src, dst, -1, kernel1); HighGui.imshow("Mask Example1", dst); dst = new Mat(); //Filtering the image using kernel2 Imgproc.filter2D(src, dst, -1, kernel2); HighGui.imshow("Mask Example2", dst); HighGui.waitKey(); } }
Hình ảnh đầu vào
Đầu ra
Khi thực thi, chương trình trên tạo các cửa sổ sau -
Kernel1 -
Kernel2 -