mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.6 KiB
95 lines
2.6 KiB
/* 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; |
|
}
|
|
|