Как получить значение OpenCV HSV из шестнадцатеричного значения цвета в C++?

Я хочу обнаружить белый / серый объект в OpenCV и, следовательно, мне нужно преобразовать #B4BAB8 в значение OpenCV HSV. Я пробовал так много вещей, но я не знаю, как рассчитать нижнюю и верхнюю часть этого цвета.. #B4BAB8 - это цвет объекта.

Какие значения я должен использовать в cv::inRange(frmHsv, cv::Scalar([WHAT VALUE?]), cv::Scalar([WHAT VALUE?]), rangeRes);?

 cv::Mat frmHsv;
 cv::cvtColor(blur, frmHsv, CV_BGR2HSV);
 // <<<<< HSV conversion

 // >>>>> Color Thresholding
 // Note: change parameters for different colors
 cv::Mat rangeRes = cv::Mat::zeros(rgbmat.size(), CV_8UC1);
 cv::inRange(frmHsv, cv::Scalar([WHAT VALUE?]), cv::Scalar([WHAT VALUE?]), rangeRes);

1 ответ

Решение

Я столкнулся с этим, когда работал с цветовыми пространствами в OpenCV. Как отметил в комментарии @Andrey Smorodov, значение #b4bab8 является шестнадцатеричным и может интерпретироваться в любом цветовом пространстве. Если у вас есть значение RGB, как вы упоминаете 180 186 184, следуйте этому для преобразования, которое OpenCV использует при использовании Imgproc.cvtcolor(). Преобразование отличается от приведенного в этом, и, следовательно, это будет работать для RGB в BGR, но не для BGR2HSV. Также убедитесь, что преобразование, которое вы делаете, соответствует правильному типу вашей матрицы.

Например, для матрицы типа CV_32FC3 RGB (245 172 127) будет LUV(2,55*76,3, 255*(134+53,3)/358,0, 255 * (39,5 +140) / 262,0). Вы можете просто создать пустое изображение "RGB" с цветом (180 186 184) любого типа и использовать cvtcolor для изменения BGR2HSV (Примечание: OpenCV загружает все изображения RGB как BGR) и проверить значение в цветовом пространстве HSV. Дайте мне знать, если это поможет!

Другие вопросы по тегам