From b8fdd914b6289d753b2a14cb800a1bc411f8e15f Mon Sep 17 00:00:00 2001 From: vihuhol Date: Wed, 19 Aug 2015 14:29:17 +0300 Subject: [PATCH 1/4] NOT READY --- apps/detector _semichev.cpp | 78 +++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 apps/detector _semichev.cpp diff --git a/apps/detector _semichev.cpp b/apps/detector _semichev.cpp new file mode 100644 index 0000000..27c1021 --- /dev/null +++ b/apps/detector _semichev.cpp @@ -0,0 +1,78 @@ +#include +#include +#include + +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/objdetect/objdetect.hpp" + +using namespace std; +using namespace cv; + +const char* params = + "{ h | help | false | print usage }" + "{ | detector | | XML file with a cascade detector }" + "{ | image | | image to detect objects on }" + "{ | video | | video file to detect on }" + "{ | camera | false | whether to detect on video stream from camera }"; + + +void drawDetections(const vector& detections, + const Scalar& color, + Mat& image) +{ + for (size_t i = 0; i < detections.size(); ++i) + { + rectangle(image, detections[i], color, 2); + } +} + +const Scalar red(0, 0, 255); +const Scalar green(0, 255, 0); +const Scalar blue(255, 0, 0); +const Scalar colors[] = {red, green, blue}; + +int main(int argc, char** argv) +{ + // Parse command line arguments. + CommandLineParser parser(argc, argv, params); + // If help flag is present, print help message and exit. + if (parser.get("help")) + { + parser.printParams(); + return 0; + } + + string detector_file = parser.get("detector"); + CV_Assert(!detector_file.empty()); + string image_file = parser.get("image"); + string video_file = parser.get("video"); + bool use_camera = parser.get("camera"); + + // TODO: Load detector. + + if (!image_file.empty()) + { + // TODO: Detect objects on image. + + } + else if (!video_file.empty()) + { + // TODO: Detect objects on every frame of a video. + + } + else if (use_camera) + { + // TODO: Detect objects on a live video stream from camera. + + } + else + { + cout << "Declare a source of images to detect on." << endl; + } + + return 0; +} + + + From 6c3beda970fcffe7284f2df2c76c32bde94c4cd7 Mon Sep 17 00:00:00 2001 From: vihuhol Date: Wed, 19 Aug 2015 16:15:27 +0300 Subject: [PATCH 2/4] Not ready --- apps/detector _semichev.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/detector _semichev.cpp b/apps/detector _semichev.cpp index 27c1021..7bfc221 100644 --- a/apps/detector _semichev.cpp +++ b/apps/detector _semichev.cpp @@ -49,22 +49,38 @@ int main(int argc, char** argv) string video_file = parser.get("video"); bool use_camera = parser.get("camera"); - // TODO: Load detector. + CascadeClassifier detector; + detector.load(detector_file); + + char key = 0; if (!image_file.empty()) { - // TODO: Detect objects on image. - + Mat image = imread(image_file); + vector objects; + detector.detectMultiScale(image, objects); + drawDetections(objects, Scalar(255, 0, 0), image); + while (key != 27) + { + imshow("Detection", image); + key = waitKey(); + } } else if (!video_file.empty()) { - // TODO: Detect objects on every frame of a video. - } else if (use_camera) { - // TODO: Detect objects on a live video stream from camera. - + VideoCapture video; + video.open(0); + Mat image; + cout << "isdkkljdf"; + while (key != 27) + { + video >> image; + imshow("Detection", image); + key = waitKey(); + } } else { From 9b600e2affbe2947ef5c9d7d12c313498a802e8a Mon Sep 17 00:00:00 2001 From: vihuhol Date: Wed, 19 Aug 2015 17:16:14 +0300 Subject: [PATCH 3/4] Not ready --- apps/detector _semichev.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/apps/detector _semichev.cpp b/apps/detector _semichev.cpp index 7bfc221..a7925c4 100644 --- a/apps/detector _semichev.cpp +++ b/apps/detector _semichev.cpp @@ -74,12 +74,26 @@ int main(int argc, char** argv) VideoCapture video; video.open(0); Mat image; - cout << "isdkkljdf"; + if (!video.isOpened()) + { + cout << "Video not opened"; + return 0; + } while (key != 27) { video >> image; - imshow("Detection", image); - key = waitKey(); + vector objects; + detector.detectMultiScale(image, objects); + drawDetections(objects, Scalar(255, 0, 0), image); + if (image.empty()) + { + cout << "Not image"; + } + else + { + imshow("Detection", image); + key = waitKey(1); + } } } else From 2384dfc5aa1ff93db20ae17fe1546328080821dd Mon Sep 17 00:00:00 2001 From: vihuhol Date: Wed, 19 Aug 2015 17:40:44 +0300 Subject: [PATCH 4/4] Detect only one type of objects --- apps/detector _semichev.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/detector _semichev.cpp b/apps/detector _semichev.cpp index a7925c4..d6edd76 100644 --- a/apps/detector _semichev.cpp +++ b/apps/detector _semichev.cpp @@ -82,15 +82,15 @@ int main(int argc, char** argv) while (key != 27) { video >> image; - vector objects; - detector.detectMultiScale(image, objects); - drawDetections(objects, Scalar(255, 0, 0), image); if (image.empty()) { cout << "Not image"; } else { + vector objects; + detector.detectMultiScale(image, objects); + drawDetections(objects, Scalar(255, 0, 0), image); imshow("Detection", image); key = waitKey(1); }