gpt4 book ai didi

opencv - OpenCV中的色相值范围

转载 作者:行者123 更新时间:2023-12-02 17:05:19 25 4
gpt4 key购买 nike

请注意,OpenCV的色相值范围为[0 179](Detect red circles in an image using OpenCV)(如果陈述不正确,请更正我)。以下是我用于获取Mat图像的色相值的函数:

Mat MainWindow::getHue(const Mat &src)
{
Mat bgr32; //CV_32FC3
src.convertTo(bgr32,CV_32FC3,1/255.0);

Mat hsv(bgr32.size(), CV_32FC3);
cvtColor(bgr32,hsv, COLOR_BGR2HSV);

Mat hue(hsv.size(), CV_32FC1);
Mat sat(hsv.size(), CV_32FC1);
Mat val(hsv.size(), CV_32FC1);
Mat out[] = {hue,sat,val};
split(hsv,out);

return hue;
}

这样生成的色相值实际上在[0,360]范围内。问题是什么?我使用 opencv3.4.5

最佳答案

Here是RGB到HSV转换的文档。

由于uchar的范围是[0,255],因此无法存储整个色相范围。因此,opencv决定使用技巧。对于这种类型的矩阵,将色相除以2。但是,此技巧仅用于uchar矩阵。可以存储整个色相范围的浮点矩阵不必求助于此。

要查看实际的技巧,只需使用uchar矩阵:

Mat MainWindow::getHue(const Mat &src)
{

Mat hsv(src.size(), CV_8UC3);
cvtColor(src,hsv, COLOR_BGR2HSV);

Mat hue(hsv.size(), CV_8UC1);
Mat sat(hsv.size(), CV_8UC1);
Mat val(hsv.size(), CV_8UC1);
Mat out[] = {hue,sat,val};
split(hsv,out);

return hue;
}

现在 hue在[0,180]范围内。

关于opencv - OpenCV中的色相值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com