我关注了 iOS video processing tutorial on the OpenCV site并设法编译并安装在设备上。但是,当我单击“开始”按钮时,没有任何可见的事情发生。显然,我的 - (void)processImage:(Mat&)image
回调从未被调用过。你能给我一些提示,可能是什么问题吗?
我检查的一些东西:
actionStart
被调用,两个日志行都打印 YESself
对象在分配给self.videoCamera.delegate
时有效imageView
有效且在屏幕上可见videoCamera
在其start
方法被调用时被初始化
我使用 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
最佳答案
我在 iPhone 4 上测试过,效果很好。也许 iPhone 3GS 没有前置摄像头?然后你必须改变这一行:self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront
to self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack
关于iphone - OpenCV视频处理教程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274326/