2

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

および 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
4

1 に答える 1

8

iPhone 4 でテストしましたが、問題なく動作します。もしかして、iPhone 3GS には前面カメラがないのでしょうか? self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront次に、この行を次のように変更する必要があります。self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack

于 2013-01-11T10:11:18.420 に答える