1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @file copyMakeBorder_demo.cpp
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @brief Sample code that shows the functionality of copyMakeBorder
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @author OpenCV team
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/imgproc/imgproc.hpp"
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/imgcodecs.hpp"
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/highgui/highgui.hpp"
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <stdlib.h>
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <stdio.h>
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace cv;
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/// Global Variables
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerMat src, dst;
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint top, bottom, left, right;
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint borderType;
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst char* window_name = "copyMakeBorder Demo";
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerRNG rng(12345);
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function main
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint main( int, char** argv )
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int c;
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Load an image
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  src = imread( argv[1] );
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( src.empty() )
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    {
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      printf(" No data entered, please enter the path to an image file \n");
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      return -1;
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    }
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Brief how-to for this program
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  printf( "\n \t copyMakeBorder Demo: \n" );
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  printf( "\t -------------------- \n" );
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  printf( " ** Press 'c' to set the border to a random constant value \n");
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  printf( " ** Press 'r' to set the border to be replicated \n");
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  printf( " ** Press 'ESC' to exit the program \n");
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Create window
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  namedWindow( window_name, WINDOW_AUTOSIZE );
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Initialize arguments for the filter
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  top = (int) (0.05*src.rows); bottom = (int) (0.05*src.rows);
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  left = (int) (0.05*src.cols); right = (int) (0.05*src.cols);
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  dst = src;
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  imshow( window_name, dst );
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for(;;)
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler       {
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         c = waitKey(500);
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         if( (char)c == 27 )
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler           { break; }
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         else if( (char)c == 'c' )
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler           { borderType = BORDER_CONSTANT; }
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         else if( (char)c == 'r' )
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler           { borderType = BORDER_REPLICATE; }
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         Scalar value( rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255) );
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         copyMakeBorder( src, dst, top, bottom, left, right, borderType, value );
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler         imshow( window_name, dst );
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler       }
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
75