Na verdade, isso pode funcionar melhor usando um modelo generativo simples em RGB, em vez de HSV.
- Obtenha uma imagem de treinamento ou várias imagens de treinamento com um pouco de pele.
- Selecione manualmente os pixels da capa (por exemplo, criando uma máscara binária)
- Calcular a média e a covariância do tom de pele em RGB (cada um deve ser vetores de 3 elementos)
- Para um pixel desconhecido, calcule sua distância de Mahalanobis a partir da média, usando a covariância.
- Classifique-o como skin se a distância for menor que um limite.
- Ajuste o limite para obter o melhor desempenho.
Edit:
Não sei se o OpenCV tem uma função para calcular a covariância, mas posso lhe dizer como fazer isso sozinho. Digamos que você tenha pixels RGB. Você colocá-los em um n x 3 matriz, vamos chamá-lo P . Em seguida, calcule m , que é o vetor RGB médio, calculando a média das colunas. m será um vetor 1 x 3. Subtrair m a partir de cada linha de P e chamar a matriz resultante Q . Agora a covariância de computação, tudo que você tem a fazer é multiplicar Q pela transposta de si: C = Q ' Q . Certifique-se de que CnnPmmmPQQC= Q′QC é 3 x 3.
Edit2:
Os valores que você está recebendo parecem muito grandes. Para obter a covariância máxima, crie a seguinte matriz:
255 255 255
0 0 0
e calcular a covariância disso. Você deve obter uma matriz em que cada valor seja aproximadamente 32513. Portanto, verifique se os valores de pixel variam de 0 a 255 e copie-os em flutuadores ou dobre corretamente. A distância de Mahalanobis está nas unidades de variação, de modo que os números devem ser pequenos. Seu limite para a classificação da pele provavelmente deve ser menor que 4.