title: OpenCV running kmeans algorithm on an image
body: <p>I am trying to run kmeans on a 3 channel color image, but every time I try to run the function it seems to crash with the following error:</p>
  
  <pre><code>OpenCV Error: Assertion failed (data.dims &lt;= 2 &amp;&amp; type == CV_32F &amp;&amp; K &gt; 0) in unknown function, file ..\..\..\OpenCV-2.3.0\modules\core\src\matrix.cpp, line 2271
  </code></pre>
  
  <p>I've included the code below with some comments to help specify what is being passed in. Any help is greatly appreciated.</p>
  
  <pre><code>// 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-&gt;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&lt;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);
  </code></pre>