OpenCV works with the kmeans algorithm in the image

I try to run kmeans on a three-channel color image, but every time I try to run this function, it seems to crash with the following error:

OpenCV Error: Assertion failed (data.dims <= 2 && type == CV_32F && K > 0) in unknown function, file ..\..\..\OpenCV-2.3.0\modules\core\src\matrix.cpp, line 2271 

I have included the code below with some comments to indicate what is being transmitted. Any help is appreciated.

 // 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); 
+7
source share
1 answer

The error says it all : Assertion failed (data.dims <= 2 && type == CV_32F && K > 0)

These are very simple rules for understanding, the function will work only if:

  • mImage.depth() CV_32F

  • if mImage.dims is <= 2

  • and if K > 0 . In this case, you define K as 6 .

From what you stated on this, it seems that:

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

uploads the image as IPL_DEPTH_8U by default, not IPL_DEPTH_32F . This means that mImage also IPL_DEPTH_8U , so your code does not work.

+11
source

All Articles