Java la détection de la couleur
Je cherche à mettre en œuvre une fonction en Java qui lit une image et est capable de détecter où il y a des nuances de rouge, bleu, vert, jaune, etc. dans le cadre d'une analyse d'images satellite du programme. Ainsi, par exemple, dans une norme sur l'image satellite, bleu serait de l'eau donc je voudrais le programme pour lire le nombre de pixels bleu et puis il pouvait dire à x% de l'image est de l'eau.
Je sais qu'il serait possible à l'aide d'un chargement entier de la logique des énoncés par la lecture de la valeur RVB de chaque pixel mais est-il un moyen plus facile de faire cela? Sinon, il y aura des centaines de si les déclarations qui va prendre beaucoup de temps pour écrire, mais aussi un temps long à effectuer. Idéalement, j'aimerai quelque chose comme ceci:
if (pixelValue = red) {
redCounter++;
}
Ce qui est évidemment très simple, mais cela permettrait d'éviter d'avoir à passer à travers tous les possibles mélange RVB pour rouge, bleu, vert, jaune, violet, etc. qui sont de toutes les couleurs présentes dans certaines des images en couleurs.
Merci d'avance.
Je sais comment utiliser
getRGB
, getRed
, etc. pour chaque pixel comme je l'utiliser dans l'un des algorithmes, mais l'identité de définir les red
variable étant donné que chaque RVB combinaison de rouge?OriginalL'auteur user2517280 | 2014-03-04
Vous devez vous connecter pour publier un commentaire.
Vous devez lire chaque pixel de toute façon. Vous pouvez faire cela avec
Alternativement, vous pouvez obtenir le tampon de données à partir de l'image et d'obtenir directement les pixels comme un
int[]
array (comme décrit dans les commentaires), mais notez que cela peut avoir une incidence sur les performances lors du rendu de cette image par la suite.La prochaine étape serait de détecter si le pixel a une certaine couleur. Quand il s'agit de photos, une comparaison comme
n'a pas de sens: Les pixels ne seront pas parfaitement bleu dans la plupart des cas. Au lieu de cela, vous pourriez analyser la teinte de la valeur RVB, en les convertissant dans la HSB espace de couleur. Donc, vous pourriez faire quelque chose comme
Puis le
hsb
tableau contient la teinte, la saturation et la luminosité de la couleur. Ce seront des valeurs entre 0 et 1. La teinte multiplié par 360 va vous donner le "ton" de la couleur:La saturation et la luminosité peuvent être utilisés pour détecter les pixels qui sont "presque noir" ou "presque blanc". Donc votre analyse finale pourrait à peu près (!) ressembler à ceci:
Ces imbriquée si-états pourraient également être évités par l'utilisation d'un
NavigableMap
et sesfloorEntry
etceilingEntry
méthodes, mais le si les relevés sont probablement plus faciles à comprendre ici.+1 vous êtes les bienvenus ici
quel est le degré de décider de la valeur orange?
Qui dépend uniquement de la couleur que vous voulez à considérer comme "orange". Par exemple, envisagez-vous de color "orange" ou "jaune"? Cependant, en utilisant quelque chose comme
(deg >= 30 && deg < 45)
pourorange()
pourrait être ok...Eh bien, votre algorithme fonctionne vraiment très bien, mais dans certains scénarios comme extérieure coditions de la luminosité est élevée, il y a de fortes chances que nous avons eu tort de sortie, dans la plupart du temps à la détection de la couleur blanc. Pouvez vous me dire d'autres méthodes par lesquelles je peut résoudre ce genre de luminosité en plus de questions??
OriginalL'auteur Marco13