OpenCV:将Scalar转换为不同的颜色空间

时间:2017-04-04 21:25:50

标签: c++ opencv color-space

我正在使用cX = round(centers(n_c,1)); cY = round(centers(n_c,2)); 来定义我使用Scalar绘制的矩形的颜色:

OpenCV

但是,颜色是在HSV颜色空间而不是RGB中定义的(rectangle(imgOriginal, Point(0, 0), Point(25, 50), Scalar(H, S, V), CV_FILLED); 是RGB)。

如何将imgOriginal(或其输入,整数变量ScalarHS)转换为RGB?

(到目前为止,我只找到了答案,告诉我如何用V转换整个图像,这不是我想要的。)

4 个答案:

答案 0 :(得分:5)

虽然不是最佳,但您可以使用以下内容:

{{1}}

答案 1 :(得分:2)

这对我有用,

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 :(得分:1)

使用它来转换单个值:

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);

答案 3 :(得分:0)

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));