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:


댓글 달기