Здесь - документация для преобразования RGB в HSV.
Поскольку диапазон uchar
равен [0,255], вы не можете сохранить весь диапазон оттенков.Поэтому opencv решил использовать хитрость.Для матриц этого типа разделите оттенок на 2. Однако этот прием используется только для uchar
матриц.Матрицы с плавающей точкой, которые могут хранить весь диапазон оттенков, не должны прибегать к этому.
Чтобы увидеть трюк в действии, просто используйте матрицу uchar
:
Mat MainWindow::getHue(const Mat &src)
{
Mat hsv(src.size(), CV_8UC3);
cvtColor(src,hsv, COLOR_BGR2HSV);
Mat hue(hsv.size(), CV_8UC1);
Mat sat(hsv.size(), CV_8UC1);
Mat val(hsv.size(), CV_8UC1);
Mat out[] = {hue,sat,val};
split(hsv,out);
return hue;
}
Теперь hue
находится в диапазоне [0, 180].