2017-05-08 32 views
0

在openCV中,我必須檢測臉部和眼睛。但我的代碼不工作,這是我的代碼請檢查,這是行不通的。但我想在CvVideoCamera相同的代碼,然後我的代碼工作正常。只有一個問題眼睛沒有被發現。IOS IT是可能的CvPhotoCamera [OpenCV]我們可以檢測臉部

@property (nonatomic, strong) CvPhotoCamera* photoCamera; 
cv::CascadeClassifier faceCascade 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSString *pathToFaceCascade = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt" ofType:@"xml"]; 
    if (pathToFaceCascade == nil) { 
     [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot find path for resource haarcascade_frontalface_alt.xml" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show]; 
     return; 
    } 

    if (!faceCascade.load([pathToFaceCascade UTF8String])) { 
     [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Cannot load haarcascade_frontalface_alt.xml" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show]; 
     return; 
    } 




    photoCamera = [[CvPhotoCamera alloc] 
        initWithParentView:imageView]; 
    photoCamera.delegate = self; 
    photoCamera.defaultAVCaptureDevicePosition = 
    AVCaptureDevicePositionFront; 
    photoCamera.defaultAVCaptureSessionPreset = 
    AVCaptureSessionPresetPhoto; 
    photoCamera.defaultAVCaptureVideoOrientation = 
    AVCaptureVideoOrientationPortrait; 
    [photoCamera start]; 

    [self.view addSubview:imageView]; 



     // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
- (void)photoCamera:(CvPhotoCamera*)camera 
     capturedImage:(UIImage *)image; 
{ 
    [camera stop]; 
    imageView.image = image; 

    // [takePhotoButton setEnabled:NO]; 
    // [startCaptureButton setEnabled:YES]; 
} 
-(IBAction)takePhotoButtonPressed:(id)sender; 
{ 
    [photoCamera takePicture]; 



} 

#ifdef __cplusplus 
//...Working Good 
-(void)processImage:(Mat &)image 
{ 
    Mat bwImage; 
    cvtColor(image, bwImage, CV_BGRA2GRAY); 

    equalizeHist(bwImage, bwImage); 

    std::vector<cv::Rect> faces; 
    faceCascade.detectMultiScale(bwImage, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30, 30)); 

    char buffer[64]; 
    static int number = 0; 
    sprintf(buffer, "(%d, %d) - Detected: %ld %d", bwImage.cols, bwImage.rows, faces.size(), number++); 
    String str(buffer); 
    putText(image, str, cvPoint(20, 20), 0, 0.5, cvScalar(255, 255, 255, 255)); 

    for (int i = 0; i < faces.size(); i++) { 
     cv::rectangle(image, cvPoint(faces[i].x, faces[i].y), cvPoint(faces[i].x + faces[i].width, faces[i].y + faces[i].height), cvScalar(0, 255, 255, 255), 2.0); 
    } 


} 

回答