不能让OpenCV检测iOS上的人

我从OpenCV的来源采样,并试图把它在iOS上使用,我做了以下几点:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // get cv::Mat from CMSampleBufferRef UIImage * img = [self imageFromSampleBuffer: sampleBuffer]; cv::Mat cvImg = [img CVGrayscaleMat]; cv::HOGDescriptor hog; hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); cv::vector<cv::Rect> found; hog.detectMultiScale(cvImg, found, 0.2, cv::Size(8,8), cv::Size(16,16), 1.05, 2); for( int i = 0; i < (int)found.size(); i++ ) { cv::Rect r = found[i]; dispatch_async(dispatch_get_main_queue(), ^{ self.label.text = [NSString stringWithFormat:@"Found at %d, %d, %d, %d", rx, ry, r.width, r.height]; }); NSLog(@"Found at %d, %d, %d, %d", rx, ry, r.width, r.height); } } 

CVGrayscaleMat在哪里

 -(cv::Mat)CVGrayscaleMat { CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGFloat cols = self.size.width; CGFloat rows = self.size.height; cv::Mat cvMat = cv::Mat(rows, cols, CV_8UC1); // 8 bits per component, 1 channel CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to backing data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNone | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), self.CGImage); CGContextRelease(contextRef); CGColorSpaceRelease(colorSpace); return cvMat; } 

而imageFromSampleBuffer是Apple的文档样本。 事情是 – 应用程序无法检测到人,我尝试了不同的大小和姿势 – 没有任何作品适合我。 我错过了什么?

我设法使它工作。 事实certificate,CV_8UC1matrix是不正确的,虽然openCV并没有告诉,有什么错,当我通过它来检测MultiScale方法。 当我将CV_8UC4转换为CV_8UC3时

 -(cv::Mat) CVMat3Channels { cv::Mat rgbaMat = [self CVMat]; cv::Mat rgbMat(self.size.height, self.size.width, CV_8UC3); // 8 bits per component, 3 channels cvtColor(rgbaMat, rgbMat, CV_RGBA2RGB, 3); return rgbMat; } 

检测开始工作。