0
正如许多人之前,我有一个assertation错误的问题,我不能够解决这个问题我自己......这是我的代码 - 片段:断言失败,CopyTo从功能(C++)
void tuneParameters(cv::Ptr<cv::ml::KNearest>& classifier, cv::Mat& trainDataMat, cv::Mat& trainLabels, int k[], cv::Mat classes){
//Split Data in 10 random folds to do cross validation
int n = trainDataMat.rows;
std::vector <int> seeds;
for (int cont = 0; cont < n; cont++)
seeds.push_back(cont);
cv::randShuffle(seeds);
int n10 = floor(n/10);
cv::Mat train(n10*9, 3, CV_32F);
trainDataMat.copyTo(train(Rect(0,0,3,n10*9)));
...followed by the parameter tuning step
}
trainDataMat
是该数据类型:
cv::Mat trainDataMat(32505, 3, CV_32F);
当我运行,与.copyTo行我得到的错误:
OpenCV Error: Assertion failed (!fixedSize() || ((Mat*)obj)->size.operator()() == Size(_cols, _rows)) in create, file /home/aschuett/cppWS/opencv-3.2.0/modules/core/src/matrix.cpp, line 2287
terminate called after throwing an instance of 'cv::Exception'
what(): /home/aschuett/cppWS/opencv-3.2.0/modules/core/src/matrix.cpp:2287: error: (-215) !fixedSize() || ((Mat*)obj)->size.operator()() == Size(_cols, _rows) in function create
我通过各种论坛条目阅读,并找不到我的问题的解决方案...我用调试器检查了我的矩阵的大小,但它们是相应的,trainDataMat有cls:3和行:32505,train has cols: 3和行:29250。
也许别人可以看到我在做什么错了吗?是否可以使用Rect()函数?
非常感谢!干杯
你尝试切换行'trainDataMat.copyTo(train(Rect(0,0,3,n10 * 9))); 'to trainDataMat.copyTo(train(Rect(0,0,n10 * 9,3)));'? –
Jap,然后错误信息变为'Assertion failed(0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows)'。所以我想我的尺寸是正确的... – Seastar