我是Objective C的新手,我想使用Opencv来捕获视频并处理每一帧。每一帧的输出应显示在屏幕上(ios模拟器)。
ViewController.h 中的代码是:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
cv::Mat cvImage;
}
@property (nonatomic, weak) IBOutlet UIImageView* imageView;
@end
ViewController.m 中的代码是
#import "ViewController.h"
#import "opencv2/highgui/ios.h"
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <iostream>
using namespace cv;
using namespace std;
@implementation ViewController
@synthesize imageView;
- (void)viewDidLoad
{
[super viewDidLoad];
Mat frame;
cv::VideoCapture cap(VIDEO_PATH);
int count = 0;
if(!cap.isOpened()){
cout << "bad frame!!!!" << endl;
}
while(1){
if(!cap.read(frame)){
cout << "cannot read " << endl;
exit(0);
}
cout << count++ << endl;
imageView.image = MatToUIImage(frame);
imageView.frame = CGRectMake(50, 50, 150, 150); // pass your frame here
[self.view addSubview:imageView];
}
}
...
@end
如果我删除 while 循环,模拟器将显示视频中的第一帧,这是合理的。但是如果我有 while 循环,在输出控制台中,帧数正在计数,这意味着程序正在从视频中读取帧,但在 ios 模拟器中,什么都没有......
由于我想处理基于 OpenCV 的每一帧,那么在使用 OpenCV 捕获并处理后如何显示每一帧?
谢谢!
不要每帧添加新的子视图。只需将图像设置为现有视图即可。