Blame view

3rdparty/opencv-4.5.4/samples/cpp/application_trace.cpp 2.56 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  /* OpenCV Application Tracing support demo. */
  #include <iostream>
  
  #include <opencv2/core.hpp>
  #include <opencv2/imgproc.hpp>
  #include <opencv2/highgui.hpp>
  #include <opencv2/videoio.hpp>
  #include <opencv2/core/utils/trace.hpp>
  
  using namespace cv;
  using namespace std;
  
  static void process_frame(const cv::UMat& frame)
  {
      CV_TRACE_FUNCTION(); // OpenCV Trace macro for function
  
      imshow("Live", frame);
  
      UMat gray, processed;
      cv::cvtColor(frame, gray, COLOR_BGR2GRAY);
      Canny(gray, processed, 32, 64, 3);
      imshow("Processed", processed);
  }
  
  int main(int argc, char** argv)
  {
      CV_TRACE_FUNCTION();
  
      cv::CommandLineParser parser(argc, argv,
          "{help h ? |     | help message}"
          "{n        | 100 | number of frames to process }"
          "{@video   | 0   | video filename or cameraID }"
      );
      if (parser.has("help"))
      {
          parser.printMessage();
          return 0;
      }
  
      VideoCapture capture;
      std::string video = parser.get<string>("@video");
      if (video.size() == 1 && isdigit(video[0]))
          capture.open(parser.get<int>("@video"));
      else
          capture.open(samples::findFileOrKeep(video));  // keep GStreamer pipelines
      int nframes = 0;
      if (capture.isOpened())
      {
          nframes = (int)capture.get(CAP_PROP_FRAME_COUNT);
          cout << "Video " << video <<
              ": width=" << capture.get(CAP_PROP_FRAME_WIDTH) <<
              ", height=" << capture.get(CAP_PROP_FRAME_HEIGHT) <<
              ", nframes=" << nframes << endl;
      }
      else
      {
          cout << "Could not initialize video capturing...\n";
          return -1;
      }
  
      int N = parser.get<int>("n");
      if (nframes > 0 && N > nframes)
          N = nframes;
  
      cout << "Start processing..." << endl
          << "Press ESC key to terminate" << endl;
  
      UMat frame;
      for (int i = 0; N > 0 ? (i < N) : true; i++)
      {
          CV_TRACE_REGION("FRAME"); // OpenCV Trace macro for named "scope" region
          {
              CV_TRACE_REGION("read");
              capture.read(frame);
  
              if (frame.empty())
              {
                  cerr << "Can't capture frame: " << i << std::endl;
                  break;
              }
  
              // OpenCV Trace macro for NEXT named region in the same C++ scope
              // Previous "read" region will be marked complete on this line.
              // Use this to eliminate unnecessary curly braces.
              CV_TRACE_REGION_NEXT("process");
              process_frame(frame);
  
              CV_TRACE_REGION_NEXT("delay");
              if (waitKey(1) == 27/*ESC*/)
                  break;
          }
      }
  
      return 0;
  }