The canny edge detector is known as optimal detector since it detects only the existing edges, gives only one response per page and minimizes the distance between the edge pixels and detected pixels.
The Canny() method of the Imgproc class applies the canny edge detection algorithm on the given image. this method accepts −
Two Mat objects representing the source and destination images.
Two double variables to hold the threshold values.
To detect the edges of a given image using the canny edge detector −
Read the contents of the source image using the imread() method of the Imgcodecs class.
Convert it into a gray scale image using the cvtColor() method of the Imgproc class.
Blur the resultant (gray) image using the blur() method of the Imgproc class with kernel value 3.
Apply canny edge detection algorithm on the blurred image using the canny() method of the Imgproc.
Create an empty matrix with all values as 0.
Add the detected edges to it using the copyTo() method of the Mat class.
Example
import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import javafx.application.Application; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.stage.Stage; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class EdgeDetection extends Application { public void start(Stage stage) throws IOException { //Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); String file ="D:\\Images\\win2.jpg"; Mat src = Imgcodecs.imread(file); //Creating an empty matrices to store edges, source, destination Mat gray = new Mat(src.rows(), src.cols(), src.type()); Mat edges = new Mat(src.rows(), src.cols(), src.type()); Mat dst = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0)); //Converting the image to Gray Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY); //Blurring the image Imgproc.blur(gray, edges, new Size(3, 3)); //Detecting the edges Imgproc.Canny(edges, edges, 100, 100*3); //Copying the detected edges to the destination matrix src.copyTo(dst, edges); //Converting matrix to JavaFX writable image Image img = HighGui.toBufferedImage(dst); WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null); //Setting the image view ImageView imageView = new ImageView(writableImage); imageView.setX(10); imageView.setY(10); imageView.setFitWidth(575); imageView.setPreserveRatio(true); //Setting the Scene object Group root = new Group(imageView); Scene scene = new Scene(root, 595, 400); stage.setTitle("Gaussian Blur Example"); stage.setScene(scene); stage.show(); } public static void main(String args[]) { launch(args); } }
Input Image
Output
On executing, the above produces the following output −