imread()
OpenCV の関数を使用して JPEG 画像をロードしようとしてcv::Mat
いますが、iOS では失敗します (OS X でも同じコードが動作します)。返された行列は割り当てられ、有効ですが、空です (つまり、データが含まれていません)。
機能はiOSimread()
で動作しますか?imwrite()
少なくとも、実行中のアプリの Documents-Directory との間で保存および読み込みを行っている場合は機能します。
//Creating Path to Documents-Directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"ocv%03d.BMP", picNum]];
const char* cPath = [filePath cStringUsingEncoding:NSMacOSRomanStringEncoding];
const cv::string newPaths = (const cv::string)cPath;
//Save as Bitmap to Documents-Directory
cv::imwrite(newPaths, frame);
iOS は独自のファイル システムを定義しており、私は imread() と imwrite() がそれとやり取りするとは考えていません。ネイティブ機能を使用して画像を読み込んで保存する必要がありますが、画像データへのポインターを取得したら、それを cv::Mat でラップしてから opencv で処理できます。iOS 用に独自の cv_imread()、cv_imwrite() 関数を作成することは難しくありません。
これは、アプリバンドルから画像を読み込むときに機能します。
NSString *path = [[NSBundle mainBundle] pathForResource:@"pattern" ofType:@"bmp"];
const char * cpath = [path cStringUsingEncoding:NSUTF8StringEncoding];
Mat img_object = imread( cpath, CV_LOAD_IMAGE_GRAYSCALE );
私はそれをbmpsでしか動作させることができませんでしたが、jpgとpngは今のところ私のアプリでは動作しません。