2016-07-11 3 views
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を使ってキャプチャして処理した後、どのフレームをどのように表示できますか?

ありがとうございました!

答えて

0

各フレームに新しいサブビューを追加しないでください。イメージを既存のビューに設定するだけです。

+0

Thx!だから私は自分のコードを変更することはできますか?ちょうど[self.view addSubview:imageView]を削除してください。 ? –

+0

イメージをview.imageに保存し、サブビューのものを削除します – Feldur

+0

サブビューのものを削除した後、私はimageView.image = MatToUIImage(frame)を使用しました。以前と同じように、シミュレータで何も得られませんでした。フレームカウンタはまだ増加しています。 –

関連する問題