将 Opencv hsv 转换为 Matlab Hsv
Posted
技术标签:
【中文标题】将 Opencv hsv 转换为 Matlab Hsv【英文标题】:Convert Opencv hsv equivalent to Matlab Hsv 【发布时间】:2015-10-04 11:04:23 【问题描述】:我必须使用opencv开发android代码,代码相当于MATLAB。 因为我必须读取图像并将其转换为 HSV,我已经使用:
Imgproc.cvtColor(temp, hsv , Imgproc.COLOR_RGB2HSV);
当我迭代在色调的 0-255 范围内返回的像素的每个像素值时,在 Matlab 中它在 0-1 的范围内返回,我不知道如何为其编写等效代码。 我是初学者,对图像处理了解不多。
【问题讨论】:
【参考方案1】:RGB图像的取值范围,显然在[0, 255]。对于 HSV 图像,它取决于图像类型(请参阅 OpenCV doc):
8 位 图像:H in [0, 180], S,V in [0, 255] 32bit 图像:H in [0, 360] ,S,V in [0,1]所以,在你转换成 HSV 之后
Imgproc.cvtColor(temp, hsv, Imgproc.COLOR_RGB2HSV);
您需要以不同方式缩放 H 和 S,V 值。您可以使用split 和merge 来获取不同的通道矩阵,并应用正确的缩放比例。
请注意,OpenCV 将 RGB 图像存储为 BGR,因此您可能需要COLOR_BGR2HSV
。
您可以像这样拆分和合并:
List<Mat> planes = new ArrayList<Mat>(3);
Core.split(hsv, planes);
// Scale each single plane
Core.merge(planes , hsv);
【讨论】:
你能帮我如何拆分和合并频道,如果你有的话,请分享一个参考链接。非常感谢。 @Varun 更新了答案。我不完全确定,因为我不使用 Java 编程,但应该可以正常工作。请告诉我。 @Varun 很好,很高兴它有帮助 “应用正确的缩放比例。” - 嘿,你能指导我如何应用缩放吗? @Solace,分割通道后,只需将每个 Mat 乘以平面以获得正确的缩放因子【参考方案2】:255 是 1.0,128 是 0.5,依此类推。只需将 n/255 相除即可得到 Matlab HSV 值
【讨论】:
thanx @smirnov ,这对我有帮助。以上是关于将 Opencv hsv 转换为 Matlab Hsv的主要内容,如果未能解决你的问题,请参考以下文章
python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化
python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化