Cet article partage un programme de reconnaissance de code de vérification d'image Javase simple pour votre référence. Le contenu spécifique est le suivant
Tout d'abord, vous devez goûter à l'image puis en niveaux de gris l'échantillon, c'est-à-dire le transformer en noir et blanc.
Ensuite, vous pouvez utiliser cette classe pour analyser le fichier objet. Je pense que cette classe est très claire sur la façon de l'implémenter. Il s'agit de déplacer l'échantillon horizontalement à partir de la gauche et de régler les coordonnées à la position suivante si elle correspond à celle appropriée.
Ce programme a été écrit il y a plus de 3 ans, mais plus tard, il n'a pas été écrit en profondeur. La reconnaissance d'image est un domaine très profond, qui nécessite des compétences mathématiques profondes et une capacité de réflexion. Le programme Java n'est pas efficace et ne peut pas reconnaître les images déformées ou étirées. Cependant, c'était suffisant à cette époque. Si vous avez un meilleur code de reconnaissance d'image open source, assurez-vous d'écrire pour communiquer :)
/ ** * Moteur d'analyse d'image, adapté à l'analyse des codes de vérification du site Web. * Premièrement, l'échantillon doit être chargé, l'analyseur scannera horizontalement de gauche à droite et enregistrera automatiquement s'il se trouve dans l'échantillon. * Bien sûr, ce programme ne convient pas aux échantillons et n'est pas unique, c'est-à-dire que l'image à identifier est mise à l'échelle ou les coordonnées sont modifiées ou déformées. Ce programme ne peut pas effectuer une telle identification. * Si la couleur change beaucoup dans l'image, ce programme peut avoir des problèmes. Bien sûr, vous pouvez choisir une valeur standard en tant que norme pour la convertir en une matrice de 0,1. * * Production d'échantillons: veuillez convertir l'échantillon en mode de gris. Il est préférable de ne contenir que deux couleurs. Bien sûr, si vous ne vous convertissez pas, je vous aiderai également à le convertir. * * / Importer java.awt.image; import java.awt.image.bufferedImage; import java.io.file; importer java.util.arraylist; import java.util.iterator; import java.util.list; import javax.imageio.imageio; classe publique ImageParser {// --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // octet privé matriciel [] [] TargetColors; // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- valeurs [i] = string.valueof (i); } ImageParser parse = new ImageParser (fichiers, valeurs); Long start = System.CurrentTimemillis (); essayez {// analyse le système d'image.out.println (parse.parsevalue ("d: / workspace / szxclientapp / res / validatenum")); long sincETime = System.CurrentTimeMillis (); System.out.println ("Time SENSED =" + (SinceTime - Start)); } catch (exception e) {e.printStackTrace (); }} // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println ("L'exemple de fichier ne correspond pas à la valeur de l'échantillon! Veuillez le réinitialiser!"); retour; } switches = new ArrayList (FileLength); swatchEvalues = new ArrayList (valeursLength); int i = 0; essayez {pour (; i <files.length; i ++) {switches.add (imagetomatrix (files [i])); swatchEvalues.add (i, valeurs [i]); }} catch (exception e) {System.out.println (fichiers [i] + "ne peut pas être analysé"); e.printStackTrace (); }}} public ImageParser () {super (); if (swatches == null || swatchEvalues == null) {System.out.println ("Vous n'avez pas chargé l'échantillon, veuillez d'abord charger l'échantillon!"); }} / ** * Analyse de la valeur de l'image * * @param parsefilepath * Donnez le chemin d'image * @return renvoyer la chaîne * @throws exception * / public String parseValue (String parseFilePath) lève exception {StringBuffer result = new StringBuffer (); TargetColors = imagetomatrix (parsefilepath); // printMatrix (TargetColors); int height = cibleColors.length; int cibleWidth = TargetColors [0] .Length; int largeur = 0; Iterator it = switches.iterator (); while (it.hasnext ()) {byte [] [] bytes = (byte [] []) it.next (); int temple = bytes [0] .length; if (templen> largeur) largeur = templen; } // System.out.println ("maxWidth =" + width); // System.out.println ("MaxHeight =" + Height); int xtg = 0; while ((xtag + width) <TargetWidth) {cout: {iterator itx = switches.iterator (); int i = 0; while (itx.hasnext ()) {byte [] [] bytes = (byte [] []) itx.next (); octet [] [] temp = SplitMatrix (TargetColors, xtag, 0, largeur, hauteur); // System.out.println (i ++); if (isMatrixInbigMatrix (octets, temp)) {xtag + = largeur; // System.out.println ("New MaxTrix:"); // printMatrix (temp); result.append (swatchEvalues.get (i)); casser cout; } i ++; } xtag ++; }} return result.toString (); } // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- BigMatrix * grande matrice * @return Retour True s'il existe * / private statique final booléen ismatrixinbigmatrix (byte [] [] source, byte [] [] bigMatrix) {if (source == bigMatrix) return true; if (source == null || bigMatrix == null) return false; if (source.length> bigMatrix.length) return false; essayez {pour (int i = 0; i <source.length; i ++) {if (source [i] .length> bigMatrix [i] .length) return false; }} catch (arrayIndexoutofBoundSexception e) {return false; } int height = source.length; int width = source [0] .length; int x = 0, y = 0; int i = 0, j = 0; int count = 0; int compareCount = hauteur * largeur; pour (; i <bigMatrix.length - hauteur + 1; i ++) {for (j = 0; j <bigMatrix [i] .length - width + 1; j ++) {cout: {x = 0; count = 0; pour (int k = i; k <hauteur + i; k ++) {y = 0; pour (int l = j; l <width + j; l ++) {// system.out.println ("bytes [" + x + "] [" + y + "]" // + "=" + source [x] [y] + "," + "autre [" // + k + "] [" + l + "] =" + bigMatrix [k] [l]); if ((source [x] [y] & bigMatrix [k] [l]) == source [x] [y]) {count ++; } sinon casser cout; y ++; } x ++; } // system.out.println ("count =" + count); if (count == compareCount) renvoie true; }}} return false; } / ** * Cut Matrix * * @param source * Source Matrix * @param x * x Coordonnées * @param y * y coordonnées * @param largeur * largeur de la matrice de la matrice * @param hauteur * Hauteur de la matrice * @return Matrice de coupe * / Source statique privée, int y, int y, int y, int y, int y, inty octet [] [] resultBytes = nouveau octet [hauteur] [largeur]; for (int i = y, k = 0; i <hauteur + y; i ++, k ++) {for (int j = x, l = 0; j <width + x; j ++, l ++) {resultBytes [k] [l] = source [i] [j]; // System.out.println ("Source [" + i + "] [" + j + "]" + "=" + // source [i] [j] + "," + "resultBytes [" // + k + "] [" + l + "] =" + résultat [k] [l]); }} return resultBytes; } / ** * Convertir l'image en un tableau de matrice * * @param filepath * cheminement de fichier * @return renvoie la matrice * @throws exception * Une exception peut être lancée * / byte privé [] [] Imagetomatrix (String Filepath) lance l'exception {// lecture dans l'image de fichier Image = imageo.read (nouveau fichier (filepath)); int w = image.getWidth (null); int h = image.getheight (null); BufferedImage src = new BufferedImage (W, H, BufferedImage.Type_int_rgb); src.getGraphics (). DrawImage (image, 0, 0, null); octet [] [] couleurs = nouveau octet [h] [w]; for (int i = 0; i <h; i ++) {for (int j = 0; j <w; j ++) {int rgb = src.getrgb (j, i); // Traitement GraysCale de Pixels String Sred = Integer.tohexString (RGB) .SubString (2, 4); String sgreen = Integer.tohexString (RGB) .SubString (4, 6); String sblank = Integer.tohexString (RGB) .Substring (6, 8); long ired = math.round ((Integer.Parseint (sred, 16) * 0,3 + 0,5d)); Long Green = Math.round ((Integer.ParseInt (Sgreen, 16) * 0,59 + 0,5d)); long iblank = math.round ((Integer.ParseInt (sblank, 16) * 0,11 + 0,5d)); long al = ired + vert + iblank; // if (al> 127) // System.out.print ("" + ""); // else // System.out.print ("" + "1"); // System.out.print ("" + (tempint> = maxint? 0: 1)); // System.out.println ("tempint =" + tempint); / * Convertir l'image en 0,1 * / // La valeur ici peut être modifiée en la valeur que vous avez besoin pour juger dans les couleurs futures [i] [j] = (octet) (Al> 127? 0: 1); } // System.out.println (); } couleurs de retour; } / ** * Imprimer Matrix * * @param matrix * / private static final void printMatrix (byte [] [] matrix) {for (int i = 0; i <matrix.length; i ++) {for (int j = 0; j <matrix [i] .length; j ++) {if (matrix [i] [j] == System) System.out.out. else System.out.print ("1"); } System.out.println (); }}}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.