Невозможно преобразовать пороговые значения YUV в HSV

Я хочу преобразовать значения yuv_min и yuv_max в hsv_min и hsv_max. Мой код выглядит следующим образом

yuv_thresh = [97, 43, 148, 188, 81, 167] // [y_min, u_min, v_min, y_max, u_max, v_max]

cv::Mat rgb_min;
cv::Mat hsv_min;
cv::Mat yuv_min(1,1,CV_8UC3,cv::Scalar(yuv_thresh[0],yuv_thresh[1],yuv_thresh[2]));

cvtColor(yuv_min, rgb_min, cv::COLOR_YUV2BGR);
cvtColor(rgb_min,rgb_min,cv::COLOR_BGR2RGB);
cvtColor(rgb_min, hsv_min, CV_BGR2HSV);
cv::Vec3b hsv_min_vec = hsv_min.at<cv::Vec3b>(0,0);

for (int i = 0; i < 3; i++)
{
  cout<< "hsv_min: "<< i << " = " <<(float)hsv_min_vec.val[i] << endl;
}

cv::Mat rgb_max;
cv::Mat hsv_max;
cv::Mat yuv_max(1,1,CV_8UC3,cv::Scalar(yuv_thresh[3],yuv_thresh[4],yuv_thresh[5]));

cvtColor(yuv_max, rgb_max, cv::COLOR_YUV2BGR);
cvtColor(rgb_max,rgb_max,cv::COLOR_BGR2RGB);
cvtColor(rgb_max, hsv_max, CV_BGR2HSV);
cv::Vec3b hsv_max_vec = hsv_max.at<cv::Vec3b>(0,0);

for (int i = 0; i < 3; i++)
{
  cout<< "hsv_max: "<< i << " = " <<(float)hsv_max_vec.val[i] << endl;
}

Результат, который я получаю,

hsv_мин: 0 = 30

hsv_min: 1 = 255

hsv_мин: 2 = 120

hsv_max: 0 = 20

hsv_max: 1 = 154

hsv_max: 2 = 232

Видно, что hsv_min1 › hsv_max1.

Я делаю что-то не так в своем коде?

Примечание. Если кто-то думает, почему я конвертирую преобразование BGR2RGB в строку 9 и строку 23, обратитесь к этому ссылка


person vacky    schedule 28.03.2017    source источник
comment
Вы конвертируете значения BGR в значения RGB, но затем используете BGR2HSV вместо RGB2HSV.   -  person Axel B.    schedule 28.03.2017
comment
У вас есть двухэтапный алгоритм. Вы проверили средний шаг (YUV -> BGR) перед публикацией?   -  person m3h0w    schedule 28.03.2017
comment
@ m3h0w да, я проверил средний шаг, диапазон BGR правильный. Есть ли прямой способ преобразования YUV в HSV?   -  person vacky    schedule 28.03.2017
comment
@ АксельБ. Пожалуйста, проверьте ссылку, которую я упомянул в конце. Из-за ошибки в opencv 2.4 я фактически конвертирую BGR2RGB, чтобы получить значение BGR.   -  person vacky    schedule 28.03.2017
comment
я не уверен, что это ваша проблема, но попробуйте добавить _FULL к параметру цветового пространства cvtColor, например BGR2HSV_FULL. это почти не документировано, но дает другой результат. посмотрите, например, здесь.   -  person user2999345    schedule 28.03.2017