Kmeans断言错误:我的垫子不是空的

Kmeans Assertion error: my Mat isn't empty though

本文关键字:断言 错误 我的 Kmeans      更新时间:2023-10-16

我的kmeans()函数失败,错误:

OpenCV错误:断言失败(N>= K)在cv::kmeans,文件C:buildsmaster_Pacopencvmodulescoresrckmeans.cpp,第231行

我的错误是什么?'N>= K'必须意味着它检查Mat行*cols(长度)是否>集群-我的是(我认为)。我的Mat有1行,大约80k列。我的Mat是我传递的第一个参数(对于kmeans)的像素/体素数据空吗?我已经确认这个参数是一个"折叠"图像(1行,80K列)。所以它不是完全空的,但它可以全部都是黑色像素这可能是错误?

Mat image = imread("images/jp.png", CV_32F); // The Jurassic Park movie logo
cvtColor(image, image, CV_BGR2RGB);
Mat collapsedImage = image.reshape(1, 1);
collapsedImage.convertTo(collapsedImage, CV_32F);
int clusterCount = 2;
Mat labels, centres;
// Assertion error thrown here
kmeans(collapsedImage, clusterCount, labels,
    TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 10, 1.0),
    3, KMEANS_PP_CENTERS, centres);
imshow("flat", collapsedImage); // shows long flat with all black pixels
imshow("image", image);

看起来问题是我的重塑。应该是:

Mat collapsedImage = image.reshape(1, image.rows * image.cols);