问题描述
我在OpenCV网站上关注了,并设法将其编译并安装在设备上。但是,当我单击开始按钮时,什么都看不见。显然我的-(void)processImage:(Mat&)image
回调都不被调用。您能给我一些提示是什么问题吗?
I followed the iOS video processing tutorial on the OpenCV site and managed to compile and install it on the device. However when I click on the "Start" button, nothing visible happens. Apparently neither my - (void)processImage:(Mat&)image
callback is never called. Could you give me some hints what could be the problem?
我检查了一些内容:
-
actionStart
被调用,并且两行日志都显示YES -
自身$ c将$ c>对象分配给
self.videoCamera.delegate
-
imageView
有效并且在屏幕上可见 -
videoCamera
在开始$ c $初始化时初始化c>方法称为
actionStart
is called, and both log lines prints YES- the
self
object is valid when assigned toself.videoCamera.delegate
imageView
is valid and visible on the screenvideoCamera
is initialized when itsstart
method is called
我使用iPhone 3GS进行测试。
I use a iPhone 3GS for testing.
这是我的ViewController.h的完整资源:
Here is the full source of my 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:
and 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
更改为 self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack
I tested on an iPhone 4 and it works well. Maybe the iPhone 3GS doesn't have a front facing camera? Then you have to change this line: self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront
to self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack
这篇关于OpenCV视频处理教程问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!