mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 06:03:15 +08:00
Added two new sample files for copyMakeBorder and filter2D
This commit is contained in:
parent
d195871904
commit
65575cef7e
75
samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp
Normal file
75
samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp
Normal file
@ -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 <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
65
samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp
Normal file
65
samples/cpp/tutorial_code/ImgTrans/filter2D_demo.cpp
Normal file
@ -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 <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user