OpenCV работает с алгоритмом kmeans на изображении

Я пытаюсь запустить kmeans на 3-канальном цветном изображении, но каждый раз, когда я пытаюсь запустить функцию, она, похоже, падает со следующей ошибкой:

OpenCV Error: Assertion failed (data.dims  0) in unknown function, file ..\..\..\OpenCV-2.3.0\modules\core\src\matrix.cpp, line 2271 

Я включил код ниже с некоторыми комментариями, чтобы указать, что передается. Любая помощь очень ценится.

 // Load in an image // Depth: 8, Channels: 3 IplImage* iplImage = cvLoadImage("C:/TestImages/rainbox_box.jpg"); // Create a matrix to the image cv::Mat mImage = cv::Mat(iplImage); // Create a single channel image to create our labels needed IplImage* iplLabels = cvCreateImage(cvGetSize(iplImage), iplImage->depth, 1); // Convert the image to grayscale cvCvtColor(iplImage, iplLabels, CV_RGB2GRAY); // Create the matrix for the labels cv::Mat mLabels = cv::Mat(iplLabels); // Create the labels int rows = mLabels.total(); int cols = 1; cv::Mat list(rows, cols, mLabels .type()); uchar* src; uchar* dest = list.ptr(0); for(int i=0; i<mLabels.size().height; i++) { src = mLabels.ptr(i); memcpy(dest, src, mLabels.step); dest += mLabels.step; } list.convertTo(list, CV_32F); // Run the algorithm cv::Mat labellist(list.size(), CV_8UC1); cv::Mat centers(6, 1, mImage.type()); cv::TermCriteria termcrit(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0); kmeans(mImage, 6, labellist, termcrit, 3, cv::KMEANS_PP_CENTERS, centers); 

Ошибка говорит все : Assertion failed (data.dims <= 2 && type == CV_32F && K > 0)

Это очень простые правила для понимания, функция будет работать только в том случае, если:

  • mImage.depth()CV_32F

  • если mImage.dims <= 2

  • и если K > 0 . В этом случае вы определяете K как 6 .

Из того, что вы заявили по этому вопросу, кажется, что:

 IplImage* iplImage = cvLoadImage("C:/TestImages/rainbox_box.jpg");` 

загружает изображение как IPL_DEPTH_8U по умолчанию, а не IPL_DEPTH_32F . Это означает, что mImage также является IPL_DEPTH_8U , поэтому ваш код не работает.