###自己紹介
研究でiOSアプリ開発をしている学生です。よろしくお願いいたします。
前提・実現したいこと
OpenCVのライブラリを用いたiOSアプリを制作をしております。まずはiOS上でOpenCVのcalcHistを用いてカラーヒストグラムの作成に取り掛かっています。OpenCVをラップしてswift上で動かそうとしているのですがビルド時に"OpenCV 4.x+ requires enabled C++11 support"というエラーが発生してしまいます。
このエラーが発生した経緯としては
1.IplImageをxcodeが認識できない→"Expected a type"というエラー発生
2.OpenCVWrapper.hに <#opencv2/core/types_c.h> と記載。上記のエラー解決。
3.この上でビルド時に "OpenCV 4.x+ requires enabled C++11 support" が発生。
発生している問題・エラーメッセージ
"OpenCV 4.x+ requires enabled C++11 support" //まず最初に解決したいエラー "'array'file not found" //これは上記のエラーを解決すればともに解決されるらしい
該当のソースコード
OpenCVWrapper.h
C++
1#ifndef OpenCVWrapper_h 2#define OpenCVWrapper_h 3#endif /* OpenCVWrapper_h */ 4#import <UIKit/UIKit.h> 5#import <opencv2/core/types_c.h> /* "Expected a type"というエラー解決のために追加 */ 6 7@interface OpenCVManager : NSObject 8+(void) makeHistgramFromImage:(UIImage*)image; 9+ (IplImage *)createIplImageFromUIImage:(UIImage *)uiImage; 10@end
OpenCVWrapper.mm
C++
1#import <opencv2/opencv.hpp> 2#import <opencv2/imgcodecs/ios.h> 3#import <opencv2/imgproc/imgproc_c.h> 4#import <opencv2/core/types_c.h> 5#import "OpenCVWrapper.h" 6 7@implementation OpenCVWrapper 8 9+(void) makeHistgramFromImage:(UIImage *)image 10{ 11 12 cv::Mat imageMat; 13 UIImageToMat(image, imageMat); 14 15 cv::Mat grayMat; 16 cv::cvtColor (imageMat, grayMat, CV_BGR2GRAY); 17 image = MatToUIImage(grayMat); 18 19 IplImage *gray = [OpenCVManager createIplImageFromUIImage:image]; 20 21 float range[]={0,255}; 22 23 float* ranges[]={range}; 24 int histSize; 25 histSize=256; 26 CvHistogram* hist; 27 28 hist=cvCreateHist(1,&histSize,CV_HIST_ARRAY,ranges,1); 29 30 cvCalcHist(&gray,hist,0,NULL); 31 32 cvReleaseImage(&gray); 33} 34+ (IplImage *)createIplImageFromUIImage:(UIImage *)uiImage 35{ 36 CGImageRef imageRef = uiImage.CGImage; 37 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 38 IplImage *iplimage = cvCreateImage(cvSize(uiImage.size.width, uiImage.size.height), IPL_DEPTH_8U, 4); 39 40 CGContextRef contextRef = CGBitmapContextCreate( 41 iplimage->imageData, 42 iplimage->width, 43 iplimage->height, 44 iplimage->depth, 45 iplimage->widthStep, 46 colorSpace, 47 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault); 48 49 CGContextDrawImage(contextRef, CGRectMake(0, 0, uiImage.size.width, uiImage.size.height), imageRef); 50 CGContextRelease(contextRef); 51 CGColorSpaceRelease(colorSpace); 52 53 IplImage *outputImage = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3); 54 cvCvtColor(iplimage, outputImage, CV_RGBA2BGR); 55 56 cvReleaseImage(&iplimage); 57 return outputImage; 58} 59@end
openCV-Bridging-Header.h
C++
1#import"OpenCVWrapper.h"
opencv2.framework/Headers/core/cvdef.h 一部抜粋 line 691~705
C++
1#ifndef CV_CXX11 2# if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1800) 3# define CV_CXX11 1 4# endif 5#else 6# if CV_CXX11 == 0 7# undef CV_CXX11 8# endif 9#endif 10#ifndef CV_CXX11 11# error "OpenCV 4.x+ requires enabled C++11 support" //この文でエラーが起こっている 12#endif
試したこと
Build Settings → Basic → Levels
C++ Language Dialect をC++11に変更
C++ Standard Libraryを libc++(LLVM C++ standard library with C++11 support)に変更
今現在はopenCV 4.xを使っていて多くのサイトではopenCV3.xを使えばよい(C++11に対応したのは4.xからだかららしい)と書いてあったので、openCV3.xを導入してみましたがライブラリ内部でエラーが起きていてエラー天国だったのでこちらはあきらめました。
どうやってこのエラーを解決するのでしょうか?(エラー文に言われているようにC++11をenableにすればいいのだろうけれども)そもそも最初のIplimageに対して出ていた"Expected a type"のエラーの対処法が間違っているのが...という感じです。
色々なサイトの回答を見ましたが全く分からず、このエラーともう3日戦い続けてます....
コンピュータにはすごく詳しいほうではないので、もし回答いただけましたらどこから何をやるか具体的に教えていただけると非常に助かります。
以上のコードは
https://teratail.com/questions/129039
を参照にしております。
補足情報(FW/ツールのバージョンなど)
xcode 11.4
openCV ver4.2.1
回答1件
あなたの回答
tips
プレビュー