From: Ana Huaman Date: Wed, 29 Jun 2011 17:39:12 +0000 (+0000) Subject: Added 02 cpp sample files for tutorials: remap and Geometric Transformations (warpAff... X-Git-Tag: accepted/2.0/20130307.220821~2617 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0a14f76731fb32b172c06640886d15a7aa8d4206;p=profile%2Fivi%2Fopencv.git Added 02 cpp sample files for tutorials: remap and Geometric Transformations (warpAffine and Rotation2D) --- diff --git a/samples/cpp/tutorial_code/ImgTrans/Geometric_Transforms_Demo.cpp b/samples/cpp/tutorial_code/ImgTrans/Geometric_Transforms_Demo.cpp new file mode 100644 index 0000000..159d3a4 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/Geometric_Transforms_Demo.cpp @@ -0,0 +1,81 @@ +/** + * @function Geometric_Transforms_Demo.cpp + * @brief Demo code for Geometric Transforms + * @author OpenCV team + */ + +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +#include + +using namespace cv; +using namespace std; + +/// Global variables +char* source_window = "Source image"; +char* warp_window = "Warp"; +char* warp_rotate_window = "Warp + Rotate"; + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + Point2f srcTri[3]; + Point2f dstTri[3]; + + Mat rot_mat( 2, 3, CV_32FC1 ); + Mat warp_mat( 2, 3, CV_32FC1 ); + Mat src, warp_dst, warp_rotate_dst; + + /// Load the image + src = imread( argv[1], 1 ); + + /// Set the dst image the same type and size as src + warp_dst = Mat::zeros( src.rows, src.cols, src.type() ); + + /// Set your 3 points to calculate the Affine Transform + srcTri[0] = Point2f( 0,0 ); + srcTri[1] = Point2f( src.cols - 1, 0 ); + srcTri[2] = Point2f( 0, src.rows - 1 ); + + dstTri[0] = Point2f( src.cols*0.0, src.rows*0.33 ); + dstTri[1] = Point2f( src.cols*0.85, src.rows*0.25 ); + dstTri[2] = Point2f( src.cols*0.15, src.rows*0.7 ); + + /// Get the Affine Transform + warp_mat = getAffineTransform( srcTri, dstTri ); + + /// Apply the Affine Transform just found to the src image + warpAffine( src, warp_dst, warp_mat, warp_dst.size() ); + + /** Rotating the image after Warp */ + + /// Compute a rotation matrix with respect to the center of the image + Point center = Point( warp_dst.cols/2, warp_dst.rows/2 ); + double angle = -50.0; + double scale = 0.6; + + /// Get the rotation matrix with the specifications above + rot_mat = getRotationMatrix2D( center, angle, scale ); + + /// Rotate the warped image + warpAffine( warp_dst, warp_rotate_dst, rot_mat, warp_dst.size() ); + + + /// Show what you got + namedWindow( source_window, CV_WINDOW_AUTOSIZE ); + imshow( source_window, src ); + + namedWindow( warp_window, CV_WINDOW_AUTOSIZE ); + imshow( warp_window, warp_dst ); + + namedWindow( warp_rotate_window, CV_WINDOW_AUTOSIZE ); + imshow( warp_rotate_window, warp_rotate_dst ); + + /// Wait until user exits the program + waitKey(0); + + return 0; +} diff --git a/samples/cpp/tutorial_code/ImgTrans/Remap_Demo.cpp b/samples/cpp/tutorial_code/ImgTrans/Remap_Demo.cpp new file mode 100644 index 0000000..6eb1679 --- /dev/null +++ b/samples/cpp/tutorial_code/ImgTrans/Remap_Demo.cpp @@ -0,0 +1,98 @@ +/** + * @function Remap_Demo.cpp + * @brief Demo code for Remap + * @author Ana Huaman + */ + +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/imgproc/imgproc.hpp" +#include +#include + +using namespace cv; + +/// Global variables +Mat src, dst; +Mat map_x, map_y; +char* remap_window = "Remap demo"; +int ind = 0; + +/// Function Headers +void update_map( void ); + +/** + * @function main + */ +int main( int argc, char** argv ) +{ + /// Load the image + src = imread( argv[1], 1 ); + + /// Create dst, map_x and map_y with the same size as src: + dst.create( src.size(), src.type() ); + map_x.create( src.size(), CV_32FC1 ); + map_y.create( src.size(), CV_32FC1 ); + + /// Create window + namedWindow( remap_window, CV_WINDOW_AUTOSIZE ); + + /// Loop + while( true ) + { + /// Each 1 sec. Press ESC to exit the program + int c = waitKey( 1000 ); + + if( (char)c == 27 ) + { break; } + + /// Update map_x & map_y. Then apply remap + update_map(); + remap( src, dst, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0) ); + + // Display results + imshow( remap_window, dst ); + } + return 0; +} + +/** + * @function update_map + * @brief Fill the map_x and map_y matrices with 4 types of mappings + */ +void update_map( void ) +{ + ind = ind%4; + + for( int j = 0; j < src.rows; j++ ) + { for( int i = 0; i < src.cols; i++ ) + { + switch( ind ) + { + case 0: + if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 ) + { + map_x.at(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ; + map_y.at(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ; + } + else + { map_x.at(j,i) = 0 ; + map_y.at(j,i) = 0 ; + } + break; + case 1: + map_x.at(j,i) = i ; + map_y.at(j,i) = src.rows - j ; + break; + case 2: + map_x.at(j,i) = src.cols - i ; + map_y.at(j,i) = j ; + break; + case 3: + map_x.at(j,i) = src.cols - i ; + map_y.at(j,i) = src.rows - j ; + break; + } // end of switch + } + } + ind++; +}