OpenCV视频处理教程问题

MrT*_*rTJ 2 iphone opencv objective-c computer-vision ios

在OpenCV网站上关注iOS视频处理教程,并设法在设备上编译和安装它.但是当我点击"开始"按钮时,没有任何可见的事情发生.显然我的- (void)processImage:(Mat&)image回调从未被调用过.你能给我一些提示可能是什么问题吗?

我查了一些东西:

  • actionStart 被调用,两个日志行都打印为YES
  • self分配给该对象时有效self.videoCamera.delegate
  • imageView 在屏幕上有效且可见
  • videoCamerastart调用其方法时初始化

我使用iPhone 3GS进行测试.

这是我的ViewController.h的完整源代码:

#import <UIKit/UIKit.h>
#import <opencv2/highgui/cap_ios.h>

@interface ViewController : UIViewController <CvVideoCameraDelegate>
{
    IBOutlet UIImageView* imageView;
    IBOutlet UIButton* button;

    CvVideoCamera* videoCamera;
}

- (IBAction)actionStart:(id)sender;

@property (nonatomic, strong) CvVideoCamera* videoCamera;

@end
Run Code Online (Sandbox Code Playgroud)

和ViewController.mm:

@implementation ViewController

@synthesize videoCamera;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
    self.videoCamera.delegate = self;

    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
    self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
    self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
    self.videoCamera.defaultFPS = 30;
    self.videoCamera.grayscaleMode = NO;

}

#pragma mark - UI Actions

- (IBAction)actionStart:(id)sender;
{
    [self.videoCamera start];
    NSLog(@"video camera running: %d", [self.videoCamera running]);
    NSLog(@"capture session loaded: %d", [self.videoCamera captureSessionLoaded]);
}

#pragma mark - Protocol CvVideoCameraDelegate

- (void)processImage:(cv::Mat&)image
{
    // Do some OpenCV stuff with the image
    cv::Mat image_copy;
    cvtColor(image, image_copy, CV_BGRA2BGR);

    // invert image
    bitwise_not(image_copy, image_copy);
    cvtColor(image_copy, image, CV_BGR2BGRA);
}

@end
Run Code Online (Sandbox Code Playgroud)

Dan*_*tín 8

我在iPhone 4上测试过,效果很好.也许iPhone 3GS没有前置摄像头?然后你必须改变这一行:self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFronttoself.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack

  • 你是对的,这就是问题所在.该死,我用了1天:) (2认同)