将 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的主要内容,如果未能解决你的问题,请参考以下文章

Matlab 到 OpenCV:值在范围内的像素掩码

openCV中HSV颜色表示

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

python使用openCV加载图像并将BGR格式转换成HSV格式定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)并使用mask信息进行颜色分离BGR格式的图像转化为RGB并可视化

opencv 颜色识别hsv方法 C++(红色)

matlab绘制hsv色轮图