Kmeans Assertion错误:我的Mat不是空的

时间:2016-08-31 09:03:10

标签: c++ opencv

我的kmeans()功能失败并显示错误:

  

OpenCV错误:cv :: kmeans中的断言失败(N> = K),文件C:\ builds \ master_Pac   kSlave-win32-vc12-shared \ opencv \ modules \ core \ src \ kmeans.cpp,第231行

我的错误是什么? 'N> = K'必须表示检查Mat rows * cols(length)是否>>集群 - 我的是(我认为)。我的垫有1排,大约80k列。我作为第一个参数(对于kmeans)传递的Mat是否为空像素/体素数据?我已确认此参数是“折叠”图像(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);

1 个答案:

答案 0 :(得分:0)

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

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