OpenCV - Detecção de Canny Edge
O Canny Edge Detection é usado para detectar as bordas de uma imagem. Ele aceita uma imagem em escala de cinza como entrada e usa um algoritmo de vários estágios.
Você pode realizar esta operação em uma imagem usando o Canny() método do imgproc classe, a seguir está a sintaxe deste método.
Canny(image, edges, threshold1, threshold2)
Este método aceita os seguintes parâmetros -
image - A Mat objeto que representa a fonte (imagem de entrada) para esta operação.
edges - A Mat objeto que representa o destino (bordas) para esta operação.
threshold1 - Uma variável do tipo double representando o primeiro limite para o procedimento de histerese.
threshold2 - Uma variável do tipo double representando o segundo limite para o procedimento de histerese.
Exemplo
O programa a seguir é um exemplo de demonstração de como executar a operação Canny Edge Detection em uma determinada imagem.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class CannyEdgeDetection {
public static void main(String args[]) throws Exception {
// 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/chap17/canny_input.jpg";
// Reading the image
Mat src = Imgcodecs.imread(file);
// Creating an empty matrix to store the result
Mat gray = new Mat();
// Converting the image from color to Gray
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
Mat edges = new Mat();
// Detecting the edges
Imgproc.Canny(gray, edges, 60, 60*3);
// Writing the image
Imgcodecs.imwrite("E:/OpenCV/chap17/canny_output.jpg", edges);
System.out.println("Image Loaded");
}
}
Suponha que a seguir está a imagem de entrada canny_input.jpg especificado no programa acima.
Resultado
Ao executar o programa acima, você obterá a seguinte saída -
Image Processed
Se você abrir o caminho especificado, poderá observar a imagem de saída da seguinte maneira -