Java 将Opencv hsv等效为Matlab hsv

Java 将Opencv hsv等效为Matlab hsv,java,android,opencv,Java,Android,Opencv,我必须用opencv开发android代码,代码相当于MATLAB。 因为我必须读取图像并将其转换为HSV,我使用以下方法完成了此操作: Imgproc.cvtColor(temp, hsv , Imgproc.COLOR_RGB2HSV); 当我迭代每个像素时,返回的像素值在色调的0-255范围内,在Matlab中返回的值在0-1范围内,我不知道如何为它编写等价的代码。 我是个初学者。我对图像处理知之甚少。255是1.0,128是0.5,依此类推。只需除以n/255即可得到Matlab

我必须用opencv开发android代码,代码相当于MATLAB。 因为我必须读取图像并将其转换为HSV,我使用以下方法完成了此操作:

Imgproc.cvtColor(temp, hsv   , Imgproc.COLOR_RGB2HSV);
当我迭代每个像素时,返回的像素值在色调的0-255范围内,在Matlab中返回的值在0-1范围内,我不知道如何为它编写等价的代码。
我是个初学者。我对图像处理知之甚少。

255是1.0,128是0.5,依此类推。只需除以n/255即可得到Matlab HSV值

RGB图像的值范围显然在[0255]中。对于HSV图像,它取决于图像类型(请参阅):

  • 8位图像:H在[0,180]中,S在[0,255]中,V在[0,255]中
  • 32位图像:H英寸[0,360],S,V英寸[0,1]
所以,在你转换成HSV之后

Imgproc.cvtColor(temp, hsv, Imgproc.COLOR_RGB2HSV);
您需要以不同的方式缩放H和S、V值。您可以使用和获得不同的通道矩阵,并应用正确的缩放

请注意,OpenCV将RGB图像存储为BGR,因此您可能需要
COLOR\u BGR2HSV


您可以像这样拆分和合并:

List<Mat> planes = new ArrayList<Mat>(3);
Core.split(hsv, planes);
// Scale each single plane
Core.merge(planes , hsv);
列表平面=新的ArrayList(3);
堆芯分裂(hsv,平面);
//缩放每个平面
核心。合并(平面,hsv);

您能帮助我如何分割和合并频道吗?如果您有任何参考链接,请共享该链接。“非常感谢。”瓦伦更新了答案。我不完全确定,因为我不使用Java编程,但应该可以正常工作。请让我知道。@Varun nice,很高兴它帮助“应用了正确的缩放。”-嘿,你能给我一些关于如何应用缩放的指导吗?@Solace,一旦你分割通道,只需将每个垫子乘以正确的缩放系数,Anx@smirnov,这对我很有帮助。