diff --git a/samples/cpp/tutorial_code/ImgProc/Pyramids.cpp b/samples/cpp/tutorial_code/ImgProc/Pyramids.cpp
new file mode 100644
index 0000000000..42070e9754
--- /dev/null
+++ b/samples/cpp/tutorial_code/ImgProc/Pyramids.cpp
@@ -0,0 +1,75 @@
+/**
+ * @file Pyramids.cpp
+ * @brief Sample code of image pyramids (pyrDown and pyrUp)
+ * @author OpenCV team
+ */
+
+#include "opencv2/imgproc/imgproc.hpp"
+#include "opencv2/highgui/highgui.hpp"
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+using namespace cv;
+
+/// Global variables
+Mat src, dst, tmp;
+
+char* window_name = "Pyramids Demo";
+
+
+/**
+ * @function main
+ */
+int main( int argc, char** argv )
+{
+  /// General instructions
+  printf( "\n Zoom In-Out demo  \n " );
+  printf( "------------------ \n" );
+  printf( " * [u] -> Zoom in  \n" );
+  printf( " * [d] -> Zoom out \n" );
+  printf( " * [ESC] -> Close program \n \n" );
+
+  /// Test image - Make sure it s divisible by 2^{n}
+  src = imread( "../images/chicky_512.png" );
+  if( !src.data )
+    { printf(" No data! -- Exiting the program \n");
+      return -1; }
+
+  tmp = src;  
+  dst = tmp;
+
+  /// Create window
+  namedWindow( window_name, CV_WINDOW_AUTOSIZE );
+  imshow( window_name, dst );
+
+  /// Loop
+  while( true )
+  { 
+    int c;
+    c = waitKey(10);
+
+    if( (char)c == 27 )
+      { break; }
+    if( (char)c == 'u' )
+      { pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );
+        printf( "** Zoom In: Image x 2 \n" ); 
+      }
+    else if( (char)c == 'd' )
+      { pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );
+        printf( "** Zoom Out: Image / 2 \n" );
+      }
+
+    imshow( window_name, dst );
+    tmp = dst;
+   }  
+    
+   return 0;
+}
+
+
+
+
+
+
+
diff --git a/samples/cpp/tutorial_code/images/chicky_512.png b/samples/cpp/tutorial_code/images/chicky_512.png
new file mode 100644
index 0000000000..746f8cc240
Binary files /dev/null and b/samples/cpp/tutorial_code/images/chicky_512.png differ