opencv面部识别 正样本和负样本 级联分类器
//定位器 使用智能指针(能够自动释放)
Ptr<cascadeClasssfier> classfier = makePtr<cascadeClasssfier>(path);
//创建一个跟踪适配器
Android开发问题
使用CameraX角度问题 image->I420
libc++_shared.so 运行时库(cmake配置 argument '-DANDROID_STL=c++_shared')
FaceTracker *tracker = reinterpret_cast<FaceTracker*>(thiz);
jbyte *inputImage = env->GetByteArrayElements(inputImage_,0);
Mat src(height,width,CV_8UC1,inputImage);//I420
//CV_8UC1,CV_8UC2,CV_8UC3。(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)
cvtColor(src,src,CV_YUV2RGBA_I420);//转RGBA
if(rotationDegrees==90){
rotate(src,src,ROTATE_90_CLOCKWISE);
}else if(rotationDegrees==270){
rotate(src,src,ROTATE_90_COUNTERCLOCKWISE);
}
//flip(src,src,1);//镜像
Mat gray;
cvtColor(src,gray,CV_RGBA2GRAY);//RGBA转灰度图
equalizeHist(gray,gray);//对图像进行直方图均衡化
tracker->tracker->process(gray);
std::vector<Rect> faces;//向量保存人脸
tracker->tracker->getObjects(gray);
for(Rect face:faces){
rectangle(src,face,Scalar(255,0,255));//将面部区域绘制框
}
tracker->draw(src);//绘制
env->ReleaseByteArrayElements(inputImage_,inputImage,0);