mirror of https://github.com/opencv/opencv.git
parent
7225f89ea2
commit
f4e33ea0ba
5 changed files with 52 additions and 185 deletions
@ -1,104 +0,0 @@ |
||||
#if defined(__linux__) || defined(LINUX) || defined(__APPLE__) || defined(ANDROID) |
||||
|
||||
#include <opencv2/imgproc/imgproc.hpp> // Gaussian Blur |
||||
#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar) |
||||
#include <opencv2/highgui/highgui.hpp> // OpenCV window I/O |
||||
#include <opencv2/features2d/features2d.hpp> |
||||
#include <opencv2/contrib/detection_based_tracker.hpp> |
||||
|
||||
#include <stdio.h> |
||||
#include <string> |
||||
#include <vector> |
||||
|
||||
using namespace std; |
||||
using namespace cv; |
||||
|
||||
const string WindowName = "Face Detection example"; |
||||
|
||||
class CascadeDetectorAdapter: public DetectionBasedTracker::IDetector |
||||
{ |
||||
public: |
||||
CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector): |
||||
IDetector(), |
||||
Detector(detector) |
||||
{ |
||||
CV_Assert(!detector.empty()); |
||||
} |
||||
|
||||
void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) |
||||
{ |
||||
Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize); |
||||
} |
||||
|
||||
virtual ~CascadeDetectorAdapter() |
||||
{} |
||||
|
||||
private: |
||||
CascadeDetectorAdapter(); |
||||
cv::Ptr<cv::CascadeClassifier> Detector; |
||||
}; |
||||
|
||||
int main(int , char** ) |
||||
{ |
||||
namedWindow(WindowName); |
||||
|
||||
VideoCapture VideoStream(0); |
||||
|
||||
if (!VideoStream.isOpened()) |
||||
{ |
||||
printf("Error: Cannot open video stream from camera\n"); |
||||
return 1; |
||||
} |
||||
|
||||
std::string cascadeFrontalfilename = "../../data/lbpcascades/lbpcascade_frontalface.xml"; |
||||
cv::Ptr<cv::CascadeClassifier> cascade = new cv::CascadeClassifier(cascadeFrontalfilename); |
||||
cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = new CascadeDetectorAdapter(cascade); |
||||
|
||||
cascade = new cv::CascadeClassifier(cascadeFrontalfilename); |
||||
cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = new CascadeDetectorAdapter(cascade); |
||||
|
||||
DetectionBasedTracker::Parameters params; |
||||
DetectionBasedTracker Detector(MainDetector, TrackingDetector, params); |
||||
|
||||
if (!Detector.run()) |
||||
{ |
||||
printf("Error: Detector initialization failed\n"); |
||||
return 2; |
||||
} |
||||
|
||||
Mat ReferenceFrame; |
||||
Mat GrayFrame; |
||||
vector<Rect> Faces; |
||||
|
||||
while(true) |
||||
{ |
||||
VideoStream >> ReferenceFrame; |
||||
cvtColor(ReferenceFrame, GrayFrame, COLOR_RGB2GRAY); |
||||
Detector.process(GrayFrame); |
||||
Detector.getObjects(Faces); |
||||
|
||||
for (size_t i = 0; i < Faces.size(); i++) |
||||
{ |
||||
rectangle(ReferenceFrame, Faces[i], CV_RGB(0,255,0)); |
||||
} |
||||
|
||||
imshow(WindowName, ReferenceFrame); |
||||
|
||||
if (cvWaitKey(30) >= 0) break; |
||||
} |
||||
|
||||
Detector.stop(); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
#else |
||||
|
||||
#include <stdio.h> |
||||
int main() |
||||
{ |
||||
printf("This sample works for UNIX or ANDROID only\n"); |
||||
return 0; |
||||
} |
||||
|
||||
#endif |
Loading…
Reference in new issue