我用the code from here找到了Face。我试图画出眼睛和脸。 但我只能根据我先写的哪个陈述来显示眼睛或脸部。怎么做?
// Detect faces
std::vector faces;
_faceCascade.detectMultiScale(mat, faces, 1.1, 2, kHaarOptions, cv::Size(60, 60));
//Detect eyes
std::vector eyes;
_eyesCascade.detectMultiScale(mat, eyes, 1.1, 2, kHaarOptions, cv::Size(30, 30));
这里eyes.size()= 0.如果我互换两个语句的位置,我得到eyes.size()= 2和faces.size()= 0
答案 0 :(得分:14)
如果您的目标是检索iOS上的面部和眼睛位置,为什么不使用CoreImage功能?
CIImage *image = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:@"image.jpg"]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:CIDetectorAccuracyHigh, CIDetectorAccuracy, nil];
CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [faceDetector featuresInImage:image];
for(CIFaceFeature* faceFeature in features)
{
CGRect faceSize = faceFeature.bounds.size;
PointF leftEyePosition;
PointF rightEyePosition;
PointF mouthPosition;
if(faceFeature.hasLeftEyePosition)
leftEyePosition = faceFeature.leftEyePosition;
//do the same for right eye and mouth
}
它不使用OpenCV,但你可以免费获得口位。
答案 1 :(得分:0)
仅复制共享输入参数即将mat复制到mat2并将其用作第二个输入是合乎逻辑的。
答案 2 :(得分:0)
变量mat是一个数组,按值传递。在函数内部,mat内部的值发生变化,因此您先放置的任何语句都会正确实现,而第二个语句的mat更改。因此,在任一语句之前创建变量mat的深层副本,并在第二个语句中使用mat-copy变量代替mat。