Dieser Artikel teilt ein einfaches Programm zur Erkennung von Javase Image -Überprüfung für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Zuerst sollten Sie das Bild probieren und dann die Probe in Schwarzweiß umwandeln.
Dann können Sie diese Klasse verwenden, um die Objektdatei zu analysieren. Ich denke, diese Klasse ist sehr klar, wie sie implementiert werden soll. Es soll die Probe horizontal von links bewegen und die Koordinaten an die nächste Position einstellen, wenn es einem geeigneten entspricht.
Dieses Programm wurde vor mehr als 3 Jahren geschrieben, aber später wurde es nicht ausführlich geschrieben. Bilderkennung ist ein sehr tiefes Feld, das tiefgreifende mathematische Fähigkeiten und Denkfähigkeiten erfordert. Das Java -Programm ist nicht effizient und kann deformierte oder gestreckte Bilder nicht erkennen. In dieser Zeit war es jedoch genug. Wenn Sie einen besseren Open -Source -Image -Erkennungscode haben, schreiben Sie bitte, um zu kommunizieren :)
/*** Image Parsing Engine, geeignet für die Analyse von Website -Überprüfungscodes. * Zunächst muss die Probe geladen werden, der Parser scannt horizontal von links nach rechts und zeichnet automatisch auf, wenn es in der Probe gefunden wird. * Natürlich ist dieses Programm nicht für Proben geeignet und nicht einzigartig, dh das zu identifizierte Bild ist skaliert oder die Koordinaten werden verändert oder deformiert. Dieses Programm kann eine solche Identifizierung nicht durchführen. * Wenn sich die Farbe im Bild sehr stark ändert, kann dieses Programm Probleme haben. Natürlich können Sie einen Standardwert als Standard für die Konvertierung in eine 0,1 -Matrix auswählen. * * Probeproduktion: Bitte konvertieren Sie das Beispiel in den Graustufenmodus. Es ist am besten, nur zwei Farben zu enthalten. Wenn Sie nicht konvertieren, werde ich Ihnen natürlich auch helfen, es umzuwandeln. * */Import Java.awt.image; Import Java.awt.image.BuffeedImage; Import Java.io.file; Importion Java.util.ArrayList; Import Java.util.iterator; Import Java.util.List; Import Javax.image.imageo; --------------------------------------------------------------------------------------------------------------------------------------------------------- // matrixierte private Byte [] [] targetColors; // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Werte [i] = string.Valueof (i); } ImageParser Parse = new ImageParser (Dateien, Werte); Long start = system.currentTimemillis (); Versuchen Sie {// analysieren Sie das Image System.out.println (Parse.ParseValue ("D:/Workspace/SzxClientapp/res/validatenum")); long sincetime = system.currentTimemillis (); System.out.println ("Zeit verbracht =" + (Sincetime - Start)); } catch (Ausnahme e) {e.printstacktrace (); }} // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println ("Die Beispieldatei stimmt nicht mit dem Beispielwert überein! Bitte setzen Sie ihn zurück!"); zurückkehren; } switches = new ArrayList (Dateilänge); SWARCHEVALUES = New ArrayList (VALUTSLANGE); int i = 0; try {for (; i <files.length; i ++) {switches.add (Imagetomatrix (Dateien [i])); SwatcheValues.add (i, Werte [i]); }} catch (Ausnahme e) {System.out.println (Dateien [i] + "kann nicht analysiert werden"); E. printstacktrace (); }}} public imageParser () {Super (); if (swatchaches == null || swatcheValues == null) {System.out.println ("Sie haben das Beispiel nicht geladen, laden Sie bitte zuerst das Beispiel!"); }} / *** Analyse des Wertes des Bildes** @param parseFilePath* Geben Sie den Bildpfad an* @return return die String* @throws Exception* / public String ParseValue (String ParseFilePath) löst Ausnahme aus {StringBuffer result = new StringBuffer (); targetColors = Imagetomatrix (Parsefilepath); // printmatrix (targetColors); int Höhe = targetColors.length; int targetWidth = targetColors [0] .Length; int width = 0; Iterator it = switches.iterator (); while (it.hasnext ()) {byte [] [] bytes = (byte [] []) it.next (); int temple = bytes [0] .Length; if (temperen> width) width = temperen; } // system.out.println ("maxwidth =" + width); // system.out.println ("maxHeight =" + Höhe); int xtag = 0; while ((xtag + width) <targetWidth) {cout: {iterator itx = switches.iterator (); int i = 0; while (itx.hasnext ()) {byte [] [] bytes = (byte [] []) itx.next (); byte [] [] temp = splitmatrix (targetColors, XTAG, 0, Breite, Höhe); // system.out.println (i ++); if (ismatrixinbigmatrix (bytes, temp)) {xtag += width; // system.out.println ("neuer Maxtrix:"); // printmatrix (temp); result.Append (SwatcheValues.get (i)); Cout brechen; } i ++; } xtag ++; }} return result.toString (); } //. BigMatrix * Large Matrix * @return return true, wenn es existiert if (source == null || bigmatrix == null) return false; if (source.length> bigmatrix.length) return false; Versuchen Sie {für (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 = Quelle [0] .Length; int x = 0, y = 0; int i = 0, j = 0; int count = 0; int ComparyCount = Höhe * Breite; für (; i <bigmatrix.length - Höhe+1; i ++) {für (j = 0; j <bigmatrix [i] .Length - width+1; j ++) {cout: {x = 0; count = 0; für (int k = i; k <Höhe+i; k ++) {y = 0; für (int l = j; l <width + j; l ++) {// system.out.println ("bytes [" + x + "] [" + y + "]" // + "=" + Quelle [x] [y] + "," + "andere [" // + k + "] [" + l + "] if ((Quelle [x] [y] & bigmatrix [k] [l]) == Quelle [x] [y]) {count ++; } sonst break cout; y ++; } x ++; } // system.out.println ("count =" + count); if (count == vergleichung) return true; }}} return false; } / *** Matrix schneiden Byte [] [] resultBytes = neues Byte [Höhe] [Breite]; für (int i = y, k = 0; i <Höhe+y; i ++, k ++) {für (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 + "] =" + resultBytes [k] [l]); }} return resultBytes; } / *** das Bild in ein Matrix -Array umwandeln** @param filepath* Dateipfad* @return Die Matrix zurückgeben* @Throws -Ausnahme* Eine Ausnahme kann ausgeworfen werden int w = image.getwidth (null); int H = Bild.Getheight (null); Bufferedimage src = new bufferedImage (w, h, bufferedimage.type_int_rgb); src.getGraphics (). DrawImage (Bild, 0, 0, null); byte [] [] farben = neues byte [h] [w]; für (int i = 0; i <h; i ++) {für (int j = 0; j <w; j ++) {int rgb = src.getrgb (j, i); // Greyscale -Verarbeitung von Pixel 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)); langes grün = math.round ((Integer.ParseInt (sgreen, 16) * 0,59 + 0,5d)); long iblank = math.round ((Integer.ParseInt (SBLANK, 16) * 0,11 + 0,5D)); lange al = IRED + GREEN + IBLANK; // if (al> 127) // system.out.print ("" + ""); // else // system.out.print ("" + "1"); // system.out.print ("" + (tempint> = maxint? 0: 1)); // system.out.println ("tempint =" + tempint); / * Konvertieren Sie das Bild in 0,1 */ // Der Wert hier kann auf den Wert geändert werden, den Sie in den zukünftigen Farben beurteilen müssen [i] [j] = (Byte) (Al> 127? 0: 1); } // system.out.println (); } returnfarben; } / ** * drucken Matrix * * @param matrix * / private statische endgültige void printmatrix (byte [] [] matrix) {für (int i = 0; i <matrix.length; i ++) {für (int j = 0; j <matrix [i] .Length; else system.out.print ("1"); } System.out.println (); }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.