我在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;