
int size=100;std::vector<float> data(size);for (size_t i = 0; i < size ; i++){ data[i] = (float)i; //placeholder}std::vector<int> labels;std::vector<float> centers;cv::kmeans(data,3,labels,cv::TermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,10,0.1),cv::KMEANS_PP_CENTERS,centers); 由于cv :: kmeans期望输入是二维的,因此内部断言失败. CV_Assert(N> = K)失败,因为K是3而N是1.我的错误是什么?
解决方法 编辑:我刚检查了一下,它的内容如下:
//...bool isrow = data.rows == 1 && data.channels() > 1; // MORE THAN ONE CHANNELint N = !isrow ? data.rows : data.cols; //...//...CV_Assert( N >= K );
因此,如果您将数据放在一行中,则需要在输入矩阵中包含多个通道,并且列数多于K.
一个快速的解决方法:在调用kmeans之前,你的矩阵是reshape
它不会复制任何数据,只是更改矩阵的尺寸.所以如果你有:
[12345678] // mat 1 x 8
重塑2行后:
[1234| // a mat 2 x 4|5678]
你应该能够打电话给kmeans. (不要忘记重塑)
总结以上是内存溢出为你收集整理的c – 使用一维输入的OpenCV cv :: kmeans()全部内容,希望文章能够帮你解决c – 使用一维输入的OpenCV cv :: kmeans()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)