opencvの課題に関する質問。
Posted: 2018年6月26日(火) 09:51
現在学校でOpenCVでのC++を用いた画像処理の勉強をしているのですが、わからない課題があるので教えていただきたいです。
(課題) 以下は画像から顔の検出をし、その顔部分のみにぼかし処理を行うプログラムである。しかしこのプログラムは、画像中に複数の顔を検出しても、その内最初に検出した顔部分にしかぼかし処理を行えない。そこで、複数の顔すべてにぼかしが入るようにプログラムを修正しなさい。
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat img_in = imread("img.png", 1);
int i;
CascadeClassifier cascade;
if (!cascade.load("haarcascade_frontalface_alt.xml")) {
cout << "E1";
return -1;
}
vector<Rect> faces;
Mat img_in_roi = img_in.clone();
cascade.detectMultiScale(img_in, faces, 1.2, 2, CV_HAAR_SCALE_IMAGE, Size(30, 30));
vector<Rect>::const_iterator r = faces.begin();
blur(img_in(*r), img_in_roi(*r), Size(30, 30));
imshow("Img_blur_face", img_in_roi);
waitKey(0);
return 0;
}
(課題) 以下は画像から顔の検出をし、その顔部分のみにぼかし処理を行うプログラムである。しかしこのプログラムは、画像中に複数の顔を検出しても、その内最初に検出した顔部分にしかぼかし処理を行えない。そこで、複数の顔すべてにぼかしが入るようにプログラムを修正しなさい。
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat img_in = imread("img.png", 1);
int i;
CascadeClassifier cascade;
if (!cascade.load("haarcascade_frontalface_alt.xml")) {
cout << "E1";
return -1;
}
vector<Rect> faces;
Mat img_in_roi = img_in.clone();
cascade.detectMultiScale(img_in, faces, 1.2, 2, CV_HAAR_SCALE_IMAGE, Size(30, 30));
vector<Rect>::const_iterator r = faces.begin();
blur(img_in(*r), img_in_roi(*r), Size(30, 30));
imshow("Img_blur_face", img_in_roi);
waitKey(0);
return 0;
}