選択した画像を開くプログラム

開く

開くボタンを押したらファイルダイアローグがでてpngファイルを1秒表示するプログラムをCocoa Applicationで作ります。

開くを押すとファイルダイアローグがでて

選択すると画像が1秒表示されます。

ではやってみましょう。

前提

ここでは、OpenCVがインストールされていて、includeやlinkの設定がしてあるとします。

やり方がわからないかたは、

「OpenCVをインストールしてXCodeで使う」

を参考にしてください。

GUIを作る

とりあえずプロジェクトをたちあげてください。

もちろんCocoa Applicationです。

では画面を作ります。 ボタンを設置して、ウインドウを整えて、mファイルにつなげてください。

プログラムを書く

ボタンを押した後の操作を記述します。 その前に、hファイルに

#import <Cocoa/Cocoa.h>
#include "opencv/cv.h"
#include "opencv/highgui.h"

とincludeしておきましょう。 では、mファイルに次のようにプログラムを書きましょう。

- (IBAction)Button:(NSButton *)sender {
  NSOpenPanel *openPanel=[NSOpenPanel openPanel];
  //許容ファイルの種類を設定
  NSArray *allowedFileTypes=[NSArray arrayWithObjects:@"png",@"PNG",nil];
  [openPanel setAllowedFileTypes:allowedFileTypes];
  //ダイアローグを開く
  NSInteger pressButton=[openPanel runModal];
  if(pressButton ==NSOKButton)
  {
    //OKボタンが押された場合
    NSURL * filePath=[openPanel URL];  //パスを取得
    NSString* fileName=[filePath path];//形式を変換
    const char* path=[fileName UTF8String];//形式を変換
    //画像を読み込む
    IplImage* image;
    image=cvLoadImage(path,CV_LOAD_IMAGE_ANYCOLOR);
    if(image==NULL){
      //読み込めなかったら
      NSLog(@"Not Read");  //コンソールに表示
    }else{
      //読み込めたら
      cvNamedWindow("window",1);  //ウインドウを表示
      cvShowImage("window",image);//画像を表示
      cvWaitKey(1000);            //1秒待って
      cvReleaseImage(&image);     //メモリの開放
      cvDestroyWindow("window");  //画像を消す
    }
  }
}

これで実行すれば、うまくいくはずです。

命令の説明

OpenCVの命令について解説します。

IplImage* image;
image=cvLoadImage(path,CV_LOAD_IMAGE_ANYCOLOR);

この命令でIplImageという型のimageに画像を読み込みます。 pathがファイルのパスにあたります。

cvNamedWindow("window",1);

でウインドウが開きます。そして、ウインドウの名前はwindowです。

cvShowImage("window",image);

でimageをwindowに表示します。

cvWaitKey(1000);

で1000msec=1sec待つという命令です。ちなみにsecは秒という意味です。

cvReleaseImage(&image);

メモリを開放します。メモリを開放しないとメモリリークが起きて良くないです。

メモリとは一時的に記憶しておくところで、メモリがいっぱいになると当然ですが記憶できないのでプログラムにエラーが生じます。

パソコンのスペックを調べる際によく出てくるあれです。

 

最後に

cvDestroyWindow("window");

でウインドウwindowを閉じます。

著者:安井 真人(やすい まさと)