Конвертировать 32SC1 в CV_8U

Я использую функцию кластеризации kmeans в OpenCV. Возвращенные метки имеют тип CV_32SC1, и, поскольку они являются целыми числами (1,2,3,4, представляющими метки), я конвертирую его в CV_8U:

lev.convertTo (lev, CV_8U)

После преобразования он конвертируется в совершенно разные числа:

33686018
33686018
33686018
33686018
33686018
33686018

Может кто-нибудь объяснить это явление для меня? Я думал, что 2 в CV_8U должны быть такими же, как в CV_32SC1?

0

Решение

Матрица 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;
2

Другие решения

Других решений пока нет …