Opencv c++ 캠 얼굴에 사진 씌우기 질문입니다.
글쓴이: test099 / 작성시간: 화, 2019/05/28 - 5:19오후
C++ Opencv를 사용해 캠을 켜 캠에 비치는 얼굴에 아이언맨 마스크를 씌우는 소스인데
해당 부분 코드가 이해 안됩니다. 어떤 일을 하는지 알려주십시오. 모르는 부분을 올리겠습니다.
/ 웹캠을 켜기 위해 필요한 클래스 class CascadeDetectorAdapter : public DetectionBasedTracker::IDetector { public: CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector) : IDetector(), Detector(detector) { CV_Assert(detector); } void detect(const cv::Mat &Image, std::vector<cv::Rect> &objects) CV_OVERRIDE { Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize); } virtual ~CascadeDetectorAdapter() CV_OVERRIDE {} 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 = samples::findFile("../data/lbpcascade_frontalface.xml"); cv::Ptr<cv::CascadeClassifier> cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename); cv::Ptr<DetectionBasedTracker::IDetector> MainDetector = makePtr<CascadeDetectorAdapter>(cascade); if (cascade->empty()) { printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str()); // 에러 메시지 return 2; } cascade = makePtr<cv::CascadeClassifier>(cascadeFrontalfilename); cv::Ptr<DetectionBasedTracker::IDetector> TrackingDetector = makePtr<CascadeDetectorAdapter>(cascade); if (cascade->empty()) { printf("Error: Cannot load %s\n", cascadeFrontalfilename.c_str()); // 에러 메시지 return 2; } 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;
메인 코드의 do while문입니다 VideoStream >> ReferenceFrame; // 캠 이미지를 ReferenceFrame에 넣음 cvtColor(ReferenceFrame, GrayFrame, COLOR_BGR2GRAY); Detector.process(GrayFrame); Detector.getObjects(Faces);
Forums:
댓글 달기