将Opencv的Hsv颜色空间转换为Matlab Hsv

3

我需要使用opencv开发android代码,代码等价于MATLAB。 其中我需要读取一张图像并将其转换为HSV格式,我使用以下代码实现:

Imgproc.cvtColor(temp, hsv   , Imgproc.COLOR_RGB2HSV);

当我迭代每个像素值时,范围在0-255的色相中,在Matlab中返回范围为0-1,我不知道如何编写等效的代码。我是一名初学者,对图像处理不太了解。

2个回答

2

255代表1.0,128代表0.5等等。只需将n/255相除即可获得Matlab HSV值。


谢谢@smirnov,这对我很有帮助。 - AnonymousDev

2

RGB图像的取值范围显然在[0, 255]之间。对于HSV图像,则取决于图像类型(请参见OpenCV文档):

  • 8位图像:H在[0,180],S和V在[0,255]之间
  • 32位图像:H在[0,360],S和V在[0,1]之间

因此,在将其转换为HSV后。

Imgproc.cvtColor(temp, hsv, Imgproc.COLOR_RGB2HSV);

你需要以不同的比例缩放H和S、V值。你可以使用 splitmerge 来获取不同通道的矩阵,并应用正确的缩放。
请注意,OpenCV将RGB图像存储为BGR,因此您可能需要使用COLOR_BGR2HSV
您可以这样分离和合并:
List<Mat> planes = new ArrayList<Mat>(3);
Core.split(hsv, planes);
// Scale each single plane
Core.merge(planes , hsv);

你能帮我学习如何分离和合并通道吗?如果你有相关的参考链接,请分享给我。非常感谢。 - AnonymousDev
@Varun更新了答案。我不是很确定,因为我不用Java编程,但应该能正常工作。请告诉我。 - Miki
"应用正确的缩放。" - 嘿,你能指导我如何应用缩放吗? - Solace
1
@Solace,一旦你分割了通道,只需将每个Mat乘以平面以获得正确的缩放因子。 - Miki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接