0
私はObjective Cの新機能で、Opencvを使ってビデオをキャプチャして各フレームを処理したいと考えています。各フレームの出力を画面に表示する必要があります(iosシミュレータ)。Objective-CがOpenCVでキャプチャしたビデオの出力フレームを表示しないのはなぜですか?
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ループ削除する場合、シミュレータは、ビデオからの第1のフレームを表示します、それは合理的です。しかし、私はwhileループを持っている場合、出力コンソールで、フレームの数がカウントされているので、プログラムはビデオからフレームを読み込んでいますが、iosシミュレータでは何もありません....
私は処理したいのでOpenCVをベースにしたフレームごとに、OpenCVを使ってキャプチャして処理した後、どのフレームをどのように表示できますか?
ありがとうございました!
Thx!だから私は自分のコードを変更することはできますか?ちょうど[self.view addSubview:imageView]を削除してください。 ? –
イメージをview.imageに保存し、サブビューのものを削除します – Feldur
サブビューのものを削除した後、私はimageView.image = MatToUIImage(frame)を使用しました。以前と同じように、シミュレータで何も得られませんでした。フレームカウンタはまだ増加しています。 –