Artikel ini berbagi program pengenalan kode verifikasi gambar Javase sederhana untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Pertama, Anda harus mencicipi gambar dan kemudian grayscale sampel, yaitu, mengubahnya menjadi hitam dan putih.
Kemudian Anda dapat menggunakan kelas ini untuk menganalisis file objek. Saya pikir kelas ini sangat jelas tentang cara mengimplementasikannya. Ini untuk memindahkan sampel secara horizontal dari kiri, dan menyesuaikan koordinat ke posisi berikutnya jika cocok dengan yang cocok.
Program ini ditulis lebih dari 3 tahun yang lalu, tetapi kemudian tidak ditulis secara mendalam. Pengenalan gambar adalah bidang yang sangat dalam, yang membutuhkan keterampilan matematika yang mendalam dan kemampuan berpikir. Program Java tidak efisien dan tidak dapat mengenali gambar yang cacat atau diregangkan. Namun, itu sudah cukup di era itu. Jika Anda memiliki kode pengenalan gambar sumber terbuka yang lebih baik, pastikan untuk menulis untuk berkomunikasi :)
/*** Mesin parsing gambar, cocok untuk analisis kode verifikasi situs web. * Pertama, sampel harus dimuat, parser akan memindai secara horizontal dari kiri ke kanan, dan akan secara otomatis merekam jika ditemukan dalam sampel. * Tentu saja, program ini tidak cocok untuk sampel dan tidak unik, yaitu, gambar yang akan diidentifikasi ditingkatkan atau koordinat diubah atau cacat. Program ini tidak dapat melakukan identifikasi tersebut. * Jika warna sangat berubah dalam gambar, program ini mungkin memiliki masalah. Tentu saja, Anda dapat memilih nilai standar sebagai standar untuk mengubahnya menjadi matriks 0,1. * * Contoh Produksi: Harap konversi sampel ke mode grayscale. Yang terbaik adalah hanya mengandung dua warna. Tentu saja, jika Anda tidak mengonversi, saya juga akan membantu Anda mengonversinya. * */Impor java.awt.image; import java.awt.image.bufferedimage; import java.io.file; import java.util.arraylist; import java.util.iterator; import java.util.list; impor javax.imageo.imageio; kelas publik Imageparser {/{Imageparser {Imageparser {Imageparser {Imageparser { ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // matriks byte pribadi [] [] TargetColors; // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- nilai [i] = string.ValueOf (i); } ImageParser parse = ImageParser baru (file, nilai); Long Start = System.CurrentTimeMillis (); coba {// parse gambar system.out.println (parse.parsevalue ("d:/workspace/szxclientapp/res/validatenum")); panjang sincetime = system.currentTimemillis (); System.out.println ("Time Weed =" + (Sincetime - Start)); } catch (Exception e) {E.PrintStackTrace (); }} // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println ("File sampel tidak cocok dengan nilai sampel! Harap atur ulang!"); kembali; } switch = new arraylist (FileSlength); swatchevalues = new arraylist (valuesLength); int i = 0; coba {untuk (; i <file.length; i ++) {switch.add (imagetomatrix (file [i])); swatchevalues.add (i, nilai [i]); }} catch (Exception e) {System.out.println (file [i] + "tidak dapat diuraikan"); e.printstacktrace (); }}} public ImageParser () {super (); if (swatches == null || swatchevalues == null) {system.out.println ("Anda belum memuat sampel, silakan memuat sampel terlebih dahulu!"); }} / *** Parsing nilai gambar** @param parsefilePath* Berikan jalur gambar* @return kembalikan string* @Throws Exception* / public string parsevalue (string parsefilePath) melempar pengecualian {stringBuffer hasil = stringBuffer baru (); targetColors = imagetomatrix (parsefilePath); // printMatrix (targetColors); int tinggi = targetColors.length; int targetWidth = targetColors [0] .length; Lebar int = 0; Iterator it = switches.iterator (); while (it.hasnext ()) {byte [] [] bytes = (byte [] []) it.next (); int candi = bytes [0] .length; if (templen> lebar) lebar = templen; } // System.out.println ("maxWidth =" + width); // System.out.println ("MaxHeight =" + Height); 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, lebar, tinggi); // System.out.println (i ++); if (isMatrixInbigmatrix (bytes, temp)) {xtag += lebar; // System.out.println ("MAXTRIX BARU:"); // printmatrix (temp); result.append (swatchevalues.get (i)); Break Cout; } i ++; } xtag ++; }} return result.toString (); } // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Bigmatrix * matriks besar * @return kembali true jika ada */ private static final ismatrixinbigmatrix (byte [] [] source, byte [] [] bigmatrix) {if (source == BigMatrix) return true; if (source == null || bigmatrix == null) return false; if (source.length> bigmatrix.length) return false; coba {untuk (int i = 0; i <source.length; i ++) {if (sumber [i] .length> bigmatrix [i] .length) return false; }} catch (arrayIndexOutOfBoundsException e) {return false; } int height = source.length; int lebar = sumber [0] .length; int x = 0, y = 0; int i = 0, j = 0; Int Count = 0; int compareCount = tinggi * lebar; untuk (; i <bigmatrix.length - height+1; i ++) {for (j = 0; j <bigmatrix [i] .length - width+1; j ++) {cout: {x = 0; hitung = 0; untuk (int k = i; k <tinggi+i; k ++) {y = 0; untuk (int l = j; l <width + j; l ++) {// System.out.println ("bytes [" + x + "] [" + y + "]" // + "=" + Sumber [x] [y] + "," + "lainnya [" // + k + "] [" + l + "] =" + BigMaMaTRi ["// + K +" [" + l +"] = " +" K +) ["L +"] [" / + K +") if ((sumber [x] [y] & bigmatrix [k] [l]) == sumber [x] [y]) {count ++; } selain itu break cout; y ++; } x ++; } // system.out.println ("count =" + count); if (count == compareCount) return true; }}} return false; } / *** Potong matriks** @param Sumber* matriks sumber* @param x* x koordinat* @param y* y koordinat* @param lebar* lebar matriks* @param tinggi* tinggi dari matriks, byke, byte, byte, byte, byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Bytth, byte [] [] resultBytes = byte baru [tinggi] [lebar]; untuk (int i = y, k = 0; i <tinggi+y; i ++, k ++) {untuk (int j = x, l = 0; j <lebar+x; j ++, l ++) {resultBytes [k] [l] = sumber [i] [j]; // System.out.println ("Sumber [" + i + "] [" + j + "]" + "=" + // Sumber [i] [j] + "," + "resultBytes [" // + k + "] [" + l + "] =" + resultBytes [k] [l]); }} return resultBytes; } /** * Convert the image into a matrix array* * @param filePath * File path* @return Return the matrix* @throws Exception * An exception may be thrown*/ private byte[][] imageToMatrix(String filePath) throws Exception { // Read in the file Image image = ImageIO.read(new File(filePath)); int w = image.getWidth (null); int h = image.getHeight (null); BufferedImage SRC = BufferedImage baru (W, H, bufferedImage.type_int_rgb); src.getGraphics (). DrawImage (gambar, 0, 0, null); byte [] [] warna = byte baru [h] [w]; untuk (int i = 0; i <h; i ++) {for (int j = 0; j <w; j ++) {int rgb = src.getrgb (j, i); // pemrosesan grayscale dari piksel 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 + 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); / * Konversi gambar menjadi 0,1 */ // nilainya di sini dapat dimodifikasi dengan nilai yang Anda butuhkan untuk menilai dalam warna mendatang [i] [j] = (byte) (al> 127? 0: 1); } // System.out.println (); } kembali warna; } / ** * Cetak matriks * * @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 (matri = J <matrix [i]. else system.out.print ("1"); } System.out.println (); }}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.