使用copyTo函数(C ++)断言失败

时间:2017-07-31 12:18:43

标签: c++ opencv image-processing assertions

正如之前的许多人一样,我有一个断言错误问题而无法自行解决...这是我的代码片段:

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()函数吗?

提前多多感谢!!干杯

1 个答案:

答案 0 :(得分:1)

对我有用的是什么:

cv::Rect r(0,0,3,n10*9);
trainDataMat(r).copyTo(train(r));

显然,较大的Matrix必须在复制前适应&#34;目标矩阵&#34; -size?任何人都可以验证这个或它是一个不同的原因,这只是一个解决方法吗?;)