diff --git a/src/omv/img/im_filter.c b/src/omv/img/im_filter.c index f6a6f16fa..cabdcccac 100644 --- a/src/omv/img/im_filter.c +++ b/src/omv/img/im_filter.c @@ -39,18 +39,19 @@ void im_filter_bw(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) } +// Thresholds taken from "Skin Segmentation Using YUV and RGB Color Spaces" Zaher Hamid Al-Tairi void im_filter_skin(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) { if (bpp == 1) { // Kinda works for (int i=0; i80 && u>85 && u<135 && v>135 && v<180) ? 255 : 0; - dst[i+1] = (y1>80 && u>85 && u<135 && v>135 && v<180) ? 255 : 0; + dst[i+0] = (u>80 && u<130 && v>136 && v<200 && v>u) ? 255 : 0; + dst[i+1] = (u>80 && u<130 && v>136 && v<200 && v>u) ? 255 : 0; } } else { @@ -58,17 +59,14 @@ void im_filter_skin(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) uint16_t *srcrgb = (uint16_t*) src; uint16_t *dstrgb = (uint16_t*) dst; for (int i=0; i80 && u<130 && - v>136 && v<200 && v>u && - r>80 && g>30 && b>15 && - (((r-g)*(r-g)) > 225)) ? srcrgb[i] : 0; + dstrgb[i] = (u>80 && u<130 && v>136 && v<200 && + r>80 && g>30 && b>15 && (((r-g)*(r-g)) > 225)) ? srcrgb[i] : 0; } } }