From 65575cef7e0a80e6998426fa831bba722e57627f Mon Sep 17 00:00:00 2001 From: Ana Huaman Date: Sun, 26 Jun 2011 18:36:59 +0000 Subject: [PATCH] Added two new sample files for copyMakeBorder and filter2D --- .../ImgTrans/copyMakeBorder_demo.cpp | 75 +++++++++++++++++++ .../tutorial_code/ImgTrans/filter2D_demo.cpp | 65 ++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp create mode 100644 samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp diff --git a/samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp b/samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp new file mode 100644 index 0000000000..2124f67604 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp @@ -0,0 +1,75 @@ +/** + * @file copyMakeBorder_demo.cpp + * @brief Sample code that shows the functionality of copyMakeBorder + * @author OpenCV team + */ + +#include "opencv2/imgproc/imgproc.hpp" +#include "opencv2/highgui/highgui.hpp" +#include +#include + +using namespace cv; + +/// Global Variables +Mat src, dst; +int top, bottom, left, right; +int borderType; +Scalar value; +char* window_name = "copyMakeBorder Demo"; +RNG rng(12345); + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + + int c; + + /// Load an image + src = imread( argv[1] ); + + if( !src.data ) + { return -1; + printf(" No data entered, please enter the path to an image file \n"); + } + + /// Brief how-to for this program + printf( "\n \t copyMakeBorder Demo: \n" ); + printf( "\t -------------------- \n" ); + printf( " ** Press 'c' to set the border to a random constant value \n"); + printf( " ** Press 'r' to set the border to be replicated \n"); + printf( " ** Press 'ESC' to exit the program \n"); + + /// Create window + namedWindow( window_name, CV_WINDOW_AUTOSIZE ); + + /// Initialize arguments for the filter + top = (int) (0.05*src.rows); bottom = (int) (0.05*src.rows); + left = (int) (0.05*src.cols); right = (int) (0.05*src.cols); + dst = src; + + imshow( window_name, dst ); + + while( true ) + { + c = waitKey(500); + + if( (char)c == 27 ) + { break; } + else if( (char)c == 'c' ) + { borderType = BORDER_CONSTANT; } + else if( (char)c == 'r' ) + { borderType = BORDER_REPLICATE; } + + value = Scalar( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) ); + copyMakeBorder( src, dst, top, bottom, left, right, borderType, value ); + + imshow( window_name, dst ); + } + + return 0; +} + + diff --git a/samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp b/samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp new file mode 100644 index 0000000000..c5be0e7938 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp @@ -0,0 +1,65 @@ +/** + * @file filter2D_demo.cpp + * @brief Sample code that shows how to implement your own linear filters by using filter2D function + * @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 ) +{ + /// Declare variables + Mat src, dst; + + Mat kernel; + Point anchor; + double delta; + int ddepth; + int kernel_size; + char* window_name = "filter2D Demo"; + + int c; + + /// Load an image + src = imread( argv[1] ); + + if( !src.data ) + { return -1; } + + /// Create window + namedWindow( window_name, CV_WINDOW_AUTOSIZE ); + + /// Initialize arguments for the filter + anchor = Point( -1, -1 ); + delta = 0; + ddepth = -1; + + /// Loop - Will filter the image with different kernel sizes each 0.5 seconds + int ind = 0; + while( true ) + { + c = waitKey(500); + /// Press 'ESC' to exit the program + if( (char)c == 27 ) + { break; } + + /// Update kernel size for a normalized box filter + kernel_size = 3 + 2*( ind%5 ); + kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size); + + /// Apply filter + filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT ); + imshow( window_name, dst ); + ind++; + } + + return 0; +}