opencv - opencv中的色相值范围
问题描述
请注意,OpenCV 的色调值范围为 [0 179](使用 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
.
解决方案
这是 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] 范围内。
推荐阅读
- angular - 控制台中的数组不为空,但数组[0]未定义
- javascript - 值未定义反应js redux
- java - 在 mac 上安装 eclipse 失败:ZLIB 输入流意外结束
- angular - 从 S3 到 Heroku 应用程序上的外部域 URL 的 CORS 连接问题
- reactjs - React 在页面刷新时重定向到主页需要保持不变
- java - 在java中解析字符串时出现MalformedJsonException
- python - 如何为机械汤添加代理支持?
- android - 无法在 Android Studio 中连接 Android 版本 9 设备进行调试
- javascript - 为什么我的 Google OAuth 2 登录按钮不起作用?
- java - 为什么不能在 java 中用户生成的文件夹中创建子目录?