#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
CascadeClassifier face_detect = CascadeClassifier("../assets/haarcascade_frontalface_default.xml");
CascadeClassifier eye_detect = CascadeClassifier("../assets/haarcascade_eye.xml");
int main(){
Mat img = imread("../assets/lena.jpg",IMREAD_COLOR);
imshow("img",img);
vector<Rect> faces;
face_detect.detectMultiScale(img,faces,1.3);
for (int i = 0; i < faces.size(); ++i) {
// 找到人脸位置
Rect face = faces.at(i);
// 创建一个和原图一样大小的蒙板
Mat mask = Mat::zeros(img.size(),CV_8UC1);
// 设置感兴趣的区域为全白色
mask(face).setTo(255);
imshow("mask",mask);
// 使用蒙板,从原图中抠出感兴趣的图像
Mat copyFace;
img.copyTo(copyFace,mask);
imshow("copyFace",copyFace);
// 对拷贝出来的人脸进行Canny边缘提取
Mat cannyImg;
Canny(copyFace,cannyImg,100,200);
imshow("canny",cannyImg);
// 将原图,人脸位置留空
img(face) = Vec3b(0,0,0);
imshow("img kong",img);
// 将单通道的canny图转成BGR三通道的图像
Mat cannyImg3;
cvtColor(cannyImg,cannyImg3,COLOR_GRAY2BGR);
// 将留空的原图和3通道的Canny图加在一起
Mat dst;
add(cannyImg3,img,dst);
imshow("dst",dst);
}
waitKey(0);
destroyAllWindows();
return 0;
}