1/** 2 * @file CannyDetector_Demo.cpp 3 * @brief Sample code showing how to detect edges using the Canny Detector 4 * @author OpenCV team 5 */ 6 7#include "opencv2/imgproc/imgproc.hpp" 8#include "opencv2/imgcodecs.hpp" 9#include "opencv2/highgui/highgui.hpp" 10#include <stdlib.h> 11#include <stdio.h> 12 13using namespace cv; 14 15/// Global variables 16 17Mat src, src_gray; 18Mat dst, detected_edges; 19 20int edgeThresh = 1; 21int lowThreshold; 22int const max_lowThreshold = 100; 23int ratio = 3; 24int kernel_size = 3; 25const char* window_name = "Edge Map"; 26 27/** 28 * @function CannyThreshold 29 * @brief Trackbar callback - Canny thresholds input with a ratio 1:3 30 */ 31static void CannyThreshold(int, void*) 32{ 33 /// Reduce noise with a kernel 3x3 34 blur( src_gray, detected_edges, Size(3,3) ); 35 36 /// Canny detector 37 Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size ); 38 39 /// Using Canny's output as a mask, we display our result 40 dst = Scalar::all(0); 41 42 src.copyTo( dst, detected_edges); 43 imshow( window_name, dst ); 44} 45 46 47/** 48 * @function main 49 */ 50int main( int, char** argv ) 51{ 52 /// Load an image 53 src = imread( argv[1] ); 54 55 if( src.empty() ) 56 { return -1; } 57 58 /// Create a matrix of the same type and size as src (for dst) 59 dst.create( src.size(), src.type() ); 60 61 /// Convert the image to grayscale 62 cvtColor( src, src_gray, COLOR_BGR2GRAY ); 63 64 /// Create a window 65 namedWindow( window_name, WINDOW_AUTOSIZE ); 66 67 /// Create a Trackbar for user to enter threshold 68 createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold ); 69 70 /// Show the image 71 CannyThreshold(0, 0); 72 73 /// Wait until user exit program by pressing a key 74 waitKey(0); 75 76 return 0; 77} 78