侵蝕和擴張是兩種形態操作。顧名思義,形態學操作是根據圖像的形狀來處理圖像的一組操作。
基於給定的輸入圖像,開發了一個「結構單元」。這可以在兩個過程中的任何一個中完成。它們的目的是消除噪音和解決缺陷,使圖像清晰。
Dilation
此過程遵循與特定形狀(如正方形或圓形)的某個核的卷積。這個內核有一個錨定點,它表示它的中心。
此內核重疊在圖片上以計算最大像素值。經過計算,圖片被替換爲中心的錨定。通過這個過程,明亮區域的面積會增大,因此圖像的大小也會增大。
例如,處於白色陰影或明亮陰影中的對象的大小會增大,而處於黑色陰影或深色陰影中的對象的大小會減小。
您可以使用imgproc類的expand()方法對圖像執行放大操作。下面是這個方法的語法。
dilate(src, dst, kernel)
此方法接受以下參數&負;
src−AMat對象,表示此操作的源(輸入圖像)。
dst−AMat表示此操作的目標(輸出圖像)的對象。
kernel−AMat表示內核的對象。
Example
您可以使用getStructuringElement()方法準備內核矩陣。此方法接受表示變形類型的整數和大小類型的對象。
Imgproc.getStructuringElement(int shape, Size ksize);
下面的程序演示如何對給定的圖像執行膨脹操作。
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 DilateTest { 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 dilate on the Image Imgproc.dilate(src, dst, kernel); // Writing the image Imgcodecs.imwrite("E:/OpenCV/chap10/Dilation.jpg", dst); System.out.println("Image Processed"); } }
Input
假設下面是上面程序中指定的輸入圖像sample.jpg。
Output
在執行程序時,您將得到以下輸出&負;
Image Processed
如果您打開指定的路徑,您可以按以下方式觀察輸出圖像−