OpenCV - Xói mòn

Xói mòn là một quá trình tương tự như sự giãn nở. Nhưng giá trị pixel được tính ở đây là tối thiểu chứ không phải tối đa khi giãn nở. Hình ảnh được thay thế dưới điểm neo bằng giá trị pixel tối thiểu đó.

Với quy trình này, kích thước vùng tối phát triển và vùng sáng giảm. Ví dụ, kích thước của một đối tượng trong bóng tối hoặc bóng đen tăng lên, trong khi nó giảm ở bóng trắng hoặc bóng sáng.

Thí dụ

Bạn có thể thực hiện thao tác này trên một hình ảnh bằng cách sử dụng erode() phương pháp của imgproclớp học. Sau đây là cú pháp của phương thức này:

erode(src, dst, kernel)

Phương thức này chấp nhận các tham số sau:

  • src - A Mat đối tượng đại diện cho nguồn (hình ảnh đầu vào) cho hoạt động này.

  • dst - A Mat đối tượng đại diện cho đích (hình ảnh đầu ra) cho hoạt động này.

  • kernel - A Mat đối tượng đại diện cho hạt nhân.

Bạn có thể chuẩn bị ma trận hạt nhân bằng cách sử dụng getStructuringElement()phương pháp. Phương thức này chấp nhận một số nguyên đại diện chomorph_rect loại và một đối tượng của loại Size.

Imgproc.getStructuringElement(int shape, Size ksize);

Chương trình sau đây trình bày cách thực hiện thao tác xói mòn trên một hình ảnh nhất định.

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ErodeTest {
   public static void main( String[] args ) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="C:/EXAMPLES/OpenCV/sample.jpg";
      Mat src = Imgcodecs.imread(file);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      // Preparing the kernel matrix object
      Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, 
         new  Size((2*2) + 1, (2*2)+1));

      // Applying erode on the Image
      Imgproc.erode(src, dst, kernel);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap10/Erosion.jpg", dst);

      System.out.println("Image processed");
   }
}

Giả sử rằng sau đây là hình ảnh đầu vào sample.jpg được chỉ định trong chương trình trên.

Đầu ra

Khi thực hiện chương trình, bạn sẽ nhận được kết quả sau:

Image Loaded

Nếu bạn mở đường dẫn được chỉ định, bạn có thể quan sát hình ảnh đầu ra như sau: