1 #include "opencv2/core/utility.hpp" 2 #include "opencv2/imgproc.hpp" 3 #include "opencv2/imgcodecs.hpp" 4 #include "opencv2/highgui.hpp" 5 6 #include <stdio.h> 7 8 using namespace cv; 9 using namespace std; 10 11 int edgeThresh = 1; 12 Mat image, gray, edge, cedge; 13 14 // define a trackbar callback 15 static void onTrackbar(int, void*) 16 { 17 blur(gray, edge, Size(3,3)); 18 19 // Run the edge detector on grayscale 20 Canny(edge, edge, edgeThresh, edgeThresh*3, 3); 21 cedge = Scalar::all(0); 22 23 image.copyTo(cedge, edge); 24 imshow("Edge map", cedge); 25 } 26 27 static void help() 28 { 29 printf("\nThis sample demonstrates Canny edge detection\n" 30 "Call:\n" 31 " /.edge [image_name -- Default is ../data/fruits.jpg]\n\n"); 32 } 33 34 const char* keys = 35 { 36 "{@image |../data/fruits.jpg|input image name}" 37 }; 38 39 int main( int argc, const char** argv ) 40 { 41 help(); 42 43 CommandLineParser parser(argc, argv, keys); 44 string filename = parser.get<string>(0); 45 46 image = imread(filename, 1); 47 if(image.empty()) 48 { 49 printf("Cannot read image file: %s\n", filename.c_str()); 50 help(); 51 return -1; 52 } 53 cedge.create(image.size(), image.type()); 54 cvtColor(image, gray, COLOR_BGR2GRAY); 55 56 // Create a window 57 namedWindow("Edge map", 1); 58 59 // create a toolbar 60 createTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar); 61 62 // Show the image 63 onTrackbar(0, 0); 64 65 // Wait for a key stroke; the same function arranges events processing 66 waitKey(0); 67 68 return 0; 69 } 70