~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/samples/cpp/tutorial_code/ImgTrans/Remap_Demo.cpp

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * @function Remap_Demo.cpp
 
3
 * @brief Demo code for Remap
 
4
 * @author Ana Huaman
 
5
 */
 
6
 
 
7
#include "opencv2/imgcodecs.hpp"
 
8
#include "opencv2/highgui/highgui.hpp"
 
9
#include "opencv2/imgproc/imgproc.hpp"
 
10
#include <iostream>
 
11
#include <stdio.h>
 
12
 
 
13
using namespace cv;
 
14
 
 
15
/// Global variables
 
16
Mat src, dst;
 
17
Mat map_x, map_y;
 
18
const char* remap_window = "Remap demo";
 
19
int ind = 0;
 
20
 
 
21
/// Function Headers
 
22
void update_map( void );
 
23
 
 
24
/**
 
25
 * @function main
 
26
 */
 
27
int main( int, char** argv )
 
28
{
 
29
  /// Load the image
 
30
  src = imread( argv[1], 1 );
 
31
 
 
32
  /// Create dst, map_x and map_y with the same size as src:
 
33
  dst.create( src.size(), src.type() );
 
34
  map_x.create( src.size(), CV_32FC1 );
 
35
  map_y.create( src.size(), CV_32FC1 );
 
36
 
 
37
  /// Create window
 
38
  namedWindow( remap_window, WINDOW_AUTOSIZE );
 
39
 
 
40
  /// Loop
 
41
  for(;;)
 
42
  {
 
43
    /// Each 1 sec. Press ESC to exit the program
 
44
    int c = waitKey( 1000 );
 
45
 
 
46
    if( (char)c == 27 )
 
47
      { break; }
 
48
 
 
49
    /// Update map_x & map_y. Then apply remap
 
50
    update_map();
 
51
    remap( src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0) );
 
52
 
 
53
    // Display results
 
54
    imshow( remap_window, dst );
 
55
  }
 
56
  return 0;
 
57
}
 
58
 
 
59
/**
 
60
 * @function update_map
 
61
 * @brief Fill the map_x and map_y matrices with 4 types of mappings
 
62
 */
 
63
void update_map( void )
 
64
{
 
65
  ind = ind%4;
 
66
 
 
67
  for( int j = 0; j < src.rows; j++ )
 
68
    { for( int i = 0; i < src.cols; i++ )
 
69
     {
 
70
           switch( ind )
 
71
         {
 
72
         case 0:
 
73
           if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
 
74
                 {
 
75
               map_x.at<float>(j,i) = 2*( i - src.cols*0.25f ) + 0.5f ;
 
76
               map_y.at<float>(j,i) = 2*( j - src.rows*0.25f ) + 0.5f ;
 
77
              }
 
78
           else
 
79
         { map_x.at<float>(j,i) = 0 ;
 
80
               map_y.at<float>(j,i) = 0 ;
 
81
                 }
 
82
                   break;
 
83
         case 1:
 
84
               map_x.at<float>(j,i) = (float)i ;
 
85
               map_y.at<float>(j,i) = (float)(src.rows - j) ;
 
86
           break;
 
87
             case 2:
 
88
               map_x.at<float>(j,i) = (float)(src.cols - i) ;
 
89
               map_y.at<float>(j,i) = (float)j ;
 
90
           break;
 
91
             case 3:
 
92
               map_x.at<float>(j,i) = (float)(src.cols - i) ;
 
93
               map_y.at<float>(j,i) = (float)(src.rows - j) ;
 
94
           break;
 
95
             } // end of switch
 
96
     }
 
97
    }
 
98
  ind++;
 
99
}