I try the following code in C++ using OpenCV 2.42 and it fails when attempting to copy the svm
include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[]){
Mat trainData(100, 3, CV_32F);
randu(trainData, 0.0f, 10.f);
Mat classes = Mat::zeros(100, 1, CV_32F);
for(int i = 50; i < classes.rows; i++)
classes.at<float>(i) = 1.0f;
Mat sample = Mat::ones(1, 3, CV_32F);
SVM svm;
svm.train_auto(trainData, classes, Mat(), Mat(), SVMParams(), 2);
SVM svm2 = SVM(svm);
}
and gives the message (VS2010 Windows XP)
OpenCV Error: Assertion failed (udata < (uchar*)ptr && ((uchar*)ptr - udata) <=
(ptrdiff_t)(sizeof(void*)+16)) in unknown function, file ..\..\..\src\opencv\mod
ules\core\src\alloc.cpp, line 78
Is this a bug, or is there something I am missing about copying an SVM? I expected it to copy the decision function, support vectors, and other parameters, but something seems to be going wrong. I had a look at the source in ml.hpp and it doesn't seem to define a copy constructor.