OpenCV: конвертировать скаляр в другое цветовое пространство

Я использую Scalar чтобы определить цвет прямоугольника, с которым я рисую OpenCV:

rectangle(imgOriginal, Point(0, 0), Point(25, 50), Scalar(H, S, V), CV_FILLED);

Однако цвет определяется в цветовом пространстве HSV, а не в RGB (imgOriginal это RGB).

Как мне конвертировать Scalar (или его ввод, целочисленные переменные H, S, а также V) в RGB?

(Пока я только нашел ответы, говорящие мне, как преобразовать целое изображение с cvtColor что не то, что я хочу.)

5

Решение

Хотя это не оптимально, вы можете использовать следующее:

Scalar ScalarHSV2BGR(uchar H, uchar S, uchar V) {
Mat rgb;
Mat hsv(1,1, CV_8UC3, Scalar(H,S,V));
cvtColor(hsv, rgb, CV_HSV2BGR);
return Scalar(rgb.data[0], rgb.data[1], rgb.data[2]);
}
5

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

Это сработало для меня,

Mat rgb;
Mat hsv(1, 1, CV_8UC3, Scalar(224, 224, 160));

cvtColor(hsv, rgb, CV_HSV2BGR);
Scalar rgb = Scalar((int)rgb.at<cv::Vec3b>(0, 0)[0],(int)rgb.at<cv::Vec3b>(0, 0)[0],(int)rgb.at<cv::Vec3b>(0, 0)[0])
2

Используйте это для преобразования одного значения:

cv::Vec3f rgb;
cv::Vec3f hsv;
hsv[0] = H;
hsv[1] = S;
hsv[2] = V;
cvtColor(hsv, rgb, CV_HSV2BGR);

Тогда вы можете использовать это:

rectangle(imgOriginal, Point(0, 0), Point(25, 50),
Scalar(rgb[0], rgb[1], rgb[2]), CV_FILLED);
1

OpenCV 3.2.0. Примечание: h находится в диапазоне [0,360], а l и s находится в [0,1]

        Mat hls(1, 1, CV_32FC3, Scalar(h, l, s));
Mat rgb;
cvtColor(hls, rgb, COLOR_HLS2RGB);
Scalar c = Scalar(255*rgb.at<float>(0,0), 255*rgb.at<float>(0,1), 255*rgb.at<float>(0,2));
0