0

我使用数学计算将像素的 r、g、b 值转换为 h、s 和 v 值。我如何使用这些 h、s 和 v 值来创建图像并能够使用 imshow("HSV", hsv_image) 显示它们。

如果答案是使用 python 会更好,但是即使它是 C++ 也可以。

4

2 回答 2

0

如果你有一个 RGB 图像,那么就做

cvtColor(img_rgb,img_hsv,CV_RGB2HSV);

这是你想要的吗?

编辑

for(int row=0;row<height;row++)
{
    for(int col=0;col<width;col++)
    {
        Vec3b data = image_rgb.at<Vec3b>(row,col);

        Vec3b data_hsv;
        data_hsv[0] = // process red channel of pixel with data[0]
        data_hsv[1] = // process green channel of pixel with data[1]
        data_hsv[2] = // process blue channel of pixel with data[2]


        image_hsv.at<Vec3b>(row,col)[0] = data_hsv[0];
        image_hsv.at<Vec3b>(row,col)[1] = data_hsv[1];
        image_hsv.at<Vec3b>(row,col)[2] = data_hsv[2];
    }
}
于 2013-01-18T08:56:50.920 回答
0

你想要的是merge()。在 C++ 中:

// Assuming you have the H, S, and V images
std::vector<cv::Mat> channels;
channels.push_back(h);
channels.push_back(s);
channels.push_back(v);

cv::Mat hsv;
cv::merge(channels, hsv);

// Now you can display it
cv::imshow("HSV", hsv);
于 2013-01-18T12:35:14.303 回答