Оператор преобразования расстояния обычно принимает двоичные изображения в качестве входных данных. В этой операции интенсивность уровней серого в точках внутри областей переднего плана изменяется, чтобы дистанцировать их соответствующие расстояния от ближайшего значения 0 (границы).
Вы можете применить дистанционное преобразование в OpenCV, используя метод distanceTransform () . Ниже приводится синтаксис этого метода.
distanceTransform(src, dst, distanceType, maskSize)
Этот метод принимает следующие параметры —
-
src — Объект класса Mat, представляющий исходное (входное) изображение.
-
dst — Объект класса Mat, представляющий целевое (выходное) изображение.
-
distanceType — переменная типа integer, представляющая тип применяемого преобразования расстояния.
-
maskSize — переменная целочисленного типа, представляющая размер маски, которая будет использоваться.
src — Объект класса Mat, представляющий исходное (входное) изображение.
dst — Объект класса Mat, представляющий целевое (выходное) изображение.
distanceType — переменная типа integer, представляющая тип применяемого преобразования расстояния.
maskSize — переменная целочисленного типа, представляющая размер маски, которая будет использоваться.
пример
Следующая программа демонстрирует, как выполнить операцию трансформации расстояния для данного изображения.
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.jpg, указанное в вышеуказанной программе.
Выход
При выполнении программы вы получите следующий вывод:
Image Processed
Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —
Типы операций трансформации расстояния
В дополнение к типу операции расстояния DIST_C, продемонстрированному в предыдущем примере, OpenCV обслуживает различные другие типы операций преобразования расстояния. Все эти типы представлены предопределенными статическими полями (фиксированными значениями) класса Imgproc.
Вы можете выбрать нужный тип операции преобразования расстояния, передав соответствующее предопределенное значение параметру distanceType метода distanceTransform () .
// Applying distance transform Imgproc.distanceTransform(mat, dst, Imgproc.DIST_C , 3);
Ниже приведены значения, представляющие различные типы операций distanceTransform и их соответствующие выходные данные.