From 3a0d3ebdde8cd5f26d3962ef2680c708012a799a Mon Sep 17 00:00:00 2001 From: Ana Huaman Date: Sun, 26 Jun 2011 23:09:04 +0000 Subject: [PATCH] Added Laplace, Canny and Sobel samples in tutorial cpp code --- .../tutorial_code/ImgTrans/CannyDetector_Demo.cpp | 73 ++++++++++++++++++++++ .../cpp/tutorial_code/ImgTrans/Laplace_Demo.cpp | 56 +++++++++++++++++ samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp | 67 ++++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 samples/cpp/tutorial_code/ImgTrans/CannyDetector_Demo.cpp create mode 100644 samples/cpp/tutorial_code/ImgTrans/Laplace_Demo.cpp create mode 100644 samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp diff --git a/samples/cpp/tutorial_code/ImgTrans/CannyDetector_Demo.cpp b/samples/cpp/tutorial_code/ImgTrans/CannyDetector_Demo.cpp new file mode 100644 index 0000000..929fcb0 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/CannyDetector_Demo.cpp @@ -0,0 +1,73 @@ +/** + * @file CannyDetector_Demo.cpp + * @brief Sample code showing how to detect edges using the Canny Detector + * @author OpenCV team + */ + +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/highgui/highgui.hpp" +#include +#include + +using namespace cv; + +/// Global variables + +Mat src, src_gray; +Mat dst, detected_edges; + +int edgeThresh = 1; +int lowThreshold; +int const max_lowThreshold = 100; +int ratio = 3; +int kernel_size = 3; +char* window_name = "Edge Map"; + +/** + * @function CannyThreshold + * @brief Trackbar callback - Canny thresholds input with a ratio 1:3 + */ +void CannyThreshold(int, void*) +{ + /// Reduce noise with a kernel 3x3 + blur( src_gray, dst, Size(3,3) ); + + /// Canny detector + Canny( src_gray, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size ); + + /// Using Canny's output as a mask, we display our result + dst = Scalar::all(0); + + src.copyTo( dst, detected_edges); + imshow( window_name, dst ); +} + + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + /// Load an image + src = imread( argv[1] ); + + if( !src.data ) + { return -1; } + + /// Convert the image to grayscale + cvtColor( src, src_gray, CV_BGR2GRAY ); + + /// Create a window + namedWindow( window_name, CV_WINDOW_AUTOSIZE ); + + /// Create a Trackbar for user to enter threshold + createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold ); + + /// Show the image + CannyThreshold(0, 0); + + /// Wait until user exit program by pressing a key + waitKey(0); + + return 0; +} diff --git a/samples/cpp/tutorial_code/ImgTrans/Laplace_Demo.cpp b/samples/cpp/tutorial_code/ImgTrans/Laplace_Demo.cpp new file mode 100644 index 0000000..0893f27 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/Laplace_Demo.cpp @@ -0,0 +1,56 @@ +/** + * @file Laplace_Demo.cpp + * @brief Sample code showing how to detect edges using the Laplace operator + * @author OpenCV team + */ + +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/highgui/highgui.hpp" +#include +#include + +using namespace cv; + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + + Mat src, src_gray, dst; + int kernel_size = 3; + int scale = 1; + int delta = 0; + int ddepth = CV_16S; + char* window_name = "Laplace Demo"; + + int c; + + /// Load an image + src = imread( argv[1] ); + + if( !src.data ) + { return -1; } + + /// Remove noise by blurring with a Gaussian filter + GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT ); + + /// Convert the image to grayscale + cvtColor( src, src_gray, CV_RGB2GRAY ); + + /// Create window + namedWindow( window_name, CV_WINDOW_AUTOSIZE ); + + /// Apply Laplace function + Mat abs_dst; + + Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT ); + convertScaleAbs( dst, abs_dst ); + + /// Show what you got + imshow( window_name, abs_dst ); + + waitKey(0); + + return 0; +} diff --git a/samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp b/samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp new file mode 100644 index 0000000..0d161ce --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp @@ -0,0 +1,67 @@ +/** + * @file Sobel_Demo.cpp + * @brief Sample code using Sobel and/orScharr OpenCV functions to make a simple Edge Detector + * @author OpenCV team + */ + +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/highgui/highgui.hpp" +#include +#include + +using namespace cv; + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + + Mat src, src_gray; + Mat grad; + char* window_name = "Sobel Demo - Simple Edge Detector"; + int scale = 1; + int delta = 0; + int ddepth = CV_16S; + + int c; + + /// Load an image + src = imread( argv[1] ); + + if( !src.data ) + { return -1; } + + GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT ); + + /// Convert it to gray + cvtColor( src, src_gray, CV_RGB2GRAY ); + + /// Create window + namedWindow( window_name, CV_WINDOW_AUTOSIZE ); + + /// Generate grad_x and grad_y + Mat grad_x, grad_y; + Mat abs_grad_x, abs_grad_y; + + /// Gradient X + //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT ); + Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT ); + convertScaleAbs( grad_x, abs_grad_x ); + + /// Gradient Y + //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT ); + Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT ); + convertScaleAbs( grad_y, abs_grad_y ); + + /// Total Gradient (approximate) + addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad ); + + imshow( window_name, grad ); + + waitKey(0); + + return 0; +} + + -- 2.7.4