以下是用于图像处理的代码。我在一个应用程序中找到了这个代码,通过检查手指放在相机上时的红色强度来计算每分钟的心跳。我已经注意到几个需要图像处理的地方的decodeYUV方法。我在这里知道两件事:
ë
private static int decodeYUV420SPtoRedSum(byte[] yuv420sp, int width, int height) {
if (yuv420sp == null) return 0;
final int frameSize = width * height;
int sum = 0;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & yuv420sp[yp]) - 16;
if (y < 0) y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r < 0) r = 0;
else if (r > 262143) r = 262143;
if (g < 0) g = 0;
else if (g > 262143) g = 262143;
if (b < 0) b = 0;
else if (b > 262143) b = 262143;
int pixel = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
int red = (pixel >> 16) & 0xff;
sum += red;
}
}
return sum;
}`
答案 0 :(得分:0)
YUV是一种颜色模型。也许你熟悉RGB? 这与YUV将颜色信息与强度信息分开的主要区别相似。这在许多应用中都很有用。
有转换公式将YUV转换为RGB值。
算法如何计算出红色值是什么? 阅读代码,你就会知道。必要的数学逐行写下来......
为了提高您对代码的理解,我建议您至少阅读:
https://en.wikipedia.org/wiki/YUV
当然,转换章节对你特别感兴趣......