Blame view

3rdparty/opencv-4.5.4/samples/cpp/phase_corr.cpp 1.21 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  #include "opencv2/core.hpp"
  #include "opencv2/videoio.hpp"
  #include "opencv2/highgui.hpp"
  #include "opencv2/imgproc.hpp"
  
  using namespace cv;
  
  int main(int, char* [])
  {
      VideoCapture video(0);
      Mat frame, curr, prev, curr64f, prev64f, hann;
      char key;
  
      do
      {
          video >> frame;
          cvtColor(frame, curr, COLOR_RGB2GRAY);
  
          if(prev.empty())
          {
              prev = curr.clone();
              createHanningWindow(hann, curr.size(), CV_64F);
          }
  
          prev.convertTo(prev64f, CV_64F);
          curr.convertTo(curr64f, CV_64F);
  
          Point2d shift = phaseCorrelate(prev64f, curr64f, hann);
          double radius = std::sqrt(shift.x*shift.x + shift.y*shift.y);
  
          if(radius > 5)
          {
              // draw a circle and line indicating the shift direction...
              Point center(curr.cols >> 1, curr.rows >> 1);
              circle(frame, center, (int)radius, Scalar(0, 255, 0), 3, LINE_AA);
              line(frame, center, Point(center.x + (int)shift.x, center.y + (int)shift.y), Scalar(0, 255, 0), 3, LINE_AA);
          }
  
          imshow("phase shift", frame);
          key = (char)waitKey(2);
  
          prev = curr.clone();
      } while(key != 27); // Esc to exit...
  
      return 0;
  }