gpt4 book ai didi

c++ - OpenCV 在图像上运行 kmeans 算法

转载 作者:可可西里 更新时间:2023-11-01 18:26:50 27 4
gpt4 key购买 nike

我试图在 3 channel 彩色图像上运行 kmeans,但每次我尝试运行该函数时它似乎崩溃并出现以下错误:

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

我在下面的代码中包含了一些注释,以帮助指定传入的内容。非常感谢任何帮助。

// 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 ,这就是您的代码无法正常工作的原因。

关于c++ - OpenCV 在图像上运行 kmeans 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7015874/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com