OpenCVを使ってiOSでSVMアルゴリズムを実装したいのですが、Objective-Cでいくつかのメソッドを呼び出せません。 Objective-CでOpenCV CvSVMParamsを呼び出す方法私はこれを試してみたところ、「Unknown type name CvSVMParams」と表示されます。Objective-CでOpenCV CvSVMParamを呼び出してください。
編集:私の間違いを理解しています。私は古いバージョンのOpenCVを使用していました。しかし、コンパイラは
OpenCV Error: Assertion failed (samples.cols == var_count && samples.type() == CV_32F) in predict, file /Volumes/Linux/builds/precommit_ios/opencv/modules/ml/src/svm.cpp, line 1919 libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Volumes/Linux/builds/precommit_ios/opencv/modules/ml/src/svm.cpp:1919: error: (-215) samples.cols == var_count && samples.type() == CV_32F in function predict
#import "CustomObject.h"
#import <opencv2/opencv.hpp>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIKit.h>
using namespace cv;
@implementation CustomObject
- (void) supportVectorMachine {
float labels[10] = { 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 };
cv::Mat labelsMat(10, 1, CV_32FC1, labels);
float trainingData[10][2] = { { 100, 10 }, { 150, 10 }, { 600, 200 }, { 600, 10 }, { 10, 100 }, { 455, 10 }, { 345, 255 }, { 10, 501 }, { 401, 255 }, { 30, 150 } };
cv::Mat trainDataMat(10, 2, CV_32FC1, trainingData);
//opencv 3.0
Ptr<ml::SVM> svm = ml::SVM::create();
// edit: the params struct got removed,
// we use setter/getter now:
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
Ptr<TrainData> td = TrainData::create(trainDataMat, ROW_SAMPLE, labelsMat);
//Create test features
float testData[2] = { 150, 15 };
cv::Mat testDataMat(2, 1, CV_32FC1, testData);
//Predict the class labele for test data sample
float predictLable = svm->predict(testDataMat);
NSLog(@"%f", predictLable);
}
end