我在OpenCV中使用kmeans聚类功能。返回的标签类型为CV_32SC1,由于它们是整数(代表标签的1,2,3,4),我将其转换为CV_8U:

lev.convertTo(lev,CV_8U)

转换后,它将转换为完全不同的数字:

33686018
33686018
33686018
33686018
33686018
33686018

有人可以为我解释这种现象吗?我认为CV_8U中的2应该和CV_32SC1中的一样?

最佳答案

CV_8U矩阵不能​​包含这些整数值(33686018)。您使用什么代码检查结果矩阵的内容?您可能从矩阵中错误地读取了uchar值。

转换对我来说效果很好。这是我的测试代码:

// declare CV_32SC1 matrix
Mat A(3,3,CV_32SC1);

// initialize A with random numbers
randu(A, Scalar(0), Scalar(100));
cout << "original A = " << A << endl;

// convert A to CV_8U
A.convertTo(A, CV_8U);
// output the result
cout << "after converting A = " << A << endl;

// if you want to print out a single pixel of A, say at location (0,0)
int pixel = static_cast<int>(A.at<uchar>(0,0));
cout << "pixel at A(0,0) = " << pixel << endl;

10-07 20:34