我在每个onDrawFrame()
的byte[]
中接收YUV420
图像数据。我需要从给定的字节数组中找出图像中的颜色。我如何提取每个像素的U和V值,并使用它们来确定该图像中是否存在特定颜色(类似于HSV
颜色范围(。
我已经将UV阵列从原始图像数据中分离出来,如下所示:
byte[] data = image.getData();
int inputYLength = image.getWidth() * image.getHeight();
int inputUVLength = image.getWidth() * image.getHeight() / 2;
ByteBuffer uvBuffer = ByteBuffer.allocateDirect(inputUVLength);
uvBuffer.put(image.getData(), inputYLength, inputUVLength);
uvBuffer.position(0);
CCD_ 5保持U和V分量的字节值。如何将其用于颜色检测?
图像的U和V分量相对于Y分量进行下采样。所以第一步是:
- 对U和V进行上采样以匹配Y,或
- 向下采样Y以匹配U和V
选择哪一个取决于确定色调的最后阶段所需的分辨率。
第二步是将第一步的YUV转换为RGB。
第三步是将第二步的RGB转换为HSL(色调、饱和度和亮度(。
最后一步是选择与您想要的颜色相对应的H(色调(。
这个答案链接到你需要的公式。