12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include "opencv2/core/utility.hpp"
- #include "opencv2/imgproc.hpp"
- #include "opencv2/imgcodecs.hpp"
- #include "opencv2/highgui.hpp"
- #include <stdio.h>
- using namespace cv;
- using namespace std;
- int edgeThresh = 1;
- int edgeThreshScharr=1;
- Mat image, gray, blurImage, edge1, edge2, cedge;
- const char* window_name1 = "Edge map : Canny default (Sobel gradient)";
- const char* window_name2 = "Edge map : Canny with custom gradient (Scharr)";
- // define a trackbar callback
- static void onTrackbar(int, void*)
- {
- blur(gray, blurImage, Size(3,3));
- // Run the edge detector on grayscale
- Canny(blurImage, edge1, edgeThresh, edgeThresh*3, 3);
- cedge = Scalar::all(0);
- image.copyTo(cedge, edge1);
- imshow(window_name1, cedge);
- /// Canny detector with scharr
- Mat dx,dy;
- Scharr(blurImage,dx,CV_16S,1,0);
- Scharr(blurImage,dy,CV_16S,0,1);
- Canny( dx,dy, edge2, edgeThreshScharr, edgeThreshScharr*3 );
- /// Using Canny's output as a mask, we display our result
- cedge = Scalar::all(0);
- image.copyTo(cedge, edge2);
- imshow(window_name2, cedge);
- }
- static void help(const char** argv)
- {
- printf("\nThis sample demonstrates Canny edge detection\n"
- "Call:\n"
- " %s [image_name -- Default is fruits.jpg]\n\n", argv[0]);
- }
- const char* keys =
- {
- "{help h||}{@image |fruits.jpg|input image name}"
- };
- int main( int argc, const char** argv )
- {
- help(argv);
- CommandLineParser parser(argc, argv, keys);
- string filename = parser.get<string>(0);
- image = imread(samples::findFile(filename), IMREAD_COLOR);
- if(image.empty())
- {
- printf("Cannot read image file: %s\n", filename.c_str());
- help(argv);
- return -1;
- }
- cedge.create(image.size(), image.type());
- cvtColor(image, gray, COLOR_BGR2GRAY);
- // Create a window
- namedWindow(window_name1, 1);
- namedWindow(window_name2, 1);
- // create a toolbar
- createTrackbar("Canny threshold default", window_name1, &edgeThresh, 100, onTrackbar);
- createTrackbar("Canny threshold Scharr", window_name2, &edgeThreshScharr, 400, onTrackbar);
- // Show the image
- onTrackbar(0, 0);
- // Wait for a key stroke; the same function arranges events processing
- waitKey(0);
- return 0;
- }
|