距離變換運算符通常將二進位圖像作爲輸入。在該操作中,改變前景區域內的點的灰度強度,以使其各自的距離與最近的0值(邊界)保持距離。
可以使用方法distance transform()在OpenCV中應用距離變換。下面是這個方法的語法。
distanceTransform(src, dst, distanceType, maskSize)
此方法接受以下參數&負;
src−類的對象表示源(輸入)圖像。
dst−類的對象表示目標(輸出)圖像。
distance type−整數類型的變量,表示要應用的距離轉換的類型。
mask size−一個整數類型的變量,表示要使用的掩碼大小。
Example
下面的程序演示如何對給定圖像執行距離轉換操作。
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class DistanceTransform { 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 ="E:/OpenCV/chap19/input.jpg"; Mat src = Imgcodecs.imread(file,0); // Creating an empty matrix to store the results Mat dst = new Mat(); Mat binary = new Mat(); // Converting the grayscale image to binary image Imgproc.threshold(src, binary, 100, 255, Imgproc.THRESH_BINARY); // Applying distance transform Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3); // Writing the image Imgcodecs.imwrite("E:/OpenCV/chap19/distnceTransform.jpg", dst); System.out.println("Image Processed"); } }
假設下面是上面程序中指定的input imageinput.jpg。
Output
在執行程序時,您將得到以下輸出&負;
Image Processed
如果您打開指定的路徑,您可以按以下方式觀察輸出圖像−
Types of Distance Transform Operations
除了前面示例中演示的距離操作類型DIST_C之外,OpenCV還提供各種其他類型的距離轉換操作。所有這些類型都由Imgproc類的預定義靜態欄位(固定值)表示。
通過將其各自的預定義值傳遞給distance transform()方法中名爲distance type的參數,可以選擇所需的距離變換操作的類型。
// Applying distance transform Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C, 3);
下面是表示各種類型的距離變換操作及其各自輸出的值。