В этой статье используется простая программа распознавания кода кода изображения Javase для вашей ссылки. Конкретный контент заключается в следующем
Во -первых, вы должны попробовать изображение, а затем отработать образец, то есть превратить ее в черно -белый.
Затем вы можете использовать этот класс для анализа объектного файла. Я думаю, что этот класс очень ясно о том, как его реализовать. Он должен перемещать образец горизонтально слева и отрегулировать координаты в следующую позицию, если он соответствует подходящей.
Эта программа была написана более 3 лет назад, но позже она не была написана подробно. Распознавание изображения - это очень глубокое поле, которое требует глубоких математических навыков и мышления. Программа Java не эффективна и не может распознать деформированные или растянутые картинки. Однако этого было достаточно в той эпоху. Если у вас лучший код распознавания изображений с открытым исходным кодом, пожалуйста, обязательно напишите, чтобы сообщить :)
/*** Двигатель анализа изображений, подходящий для анализа кодов проверки веб -сайтов. * Во -первых, образец должен быть загружен, анализатор будет сканировать горизонтально слева направо и автоматически записывает, если он будет найден в образце. * Конечно, эта программа не подходит для образцов и не является уникальной, то есть изображение, которое будет идентифицировано, масштабируется или координаты изменяются или деформированы. Эта программа не может выполнить такую идентификацию. * Если цвет очень сильно изменяется на картинке, у этой программы могут возникнуть проблемы. Конечно, вы можете выбрать стандартное значение в качестве стандарта для преобразования его в матрицу 0,1. * * Производство образца: преобразуйте образец в режим GreyScale. Лучше всего содержать только два цвета. Конечно, если вы не конвертируете, я также помогу вам преобразовать его. * */import java.awt.image; import java.awt.image.bufferedimage; import java.io.file; import java.util.arraylist; import java.util.iterator; импорт java.util.list; import javax.imageio.imageio; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ swatcheValues = null; // матриц частного байта [] [] targetColors; // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- значения [i] = string.valueof (i); } ImageParser parse = new ImageParser (файлы, значения); long start = System.currentTimeMillis (); try {// parse the image System.out.println (parse.parsevalue ("d:/workspace/szxclientapp/res/valistenum")); Long Sincetime = System.CurrentTimeMiLlis (); System.out.println ("Time vonder =" + (Sincetime - Start)); } catch (Exception e) {e.printstackTrace (); }} // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. System.out.println («Пример файла не соответствует значению образца! Пожалуйста, сбросьте его!»); возвращаться; } switches = new ArrayList (filesLength); SwatchEvalues = new ArrayList (ValueLength); int i = 0; try {for (; i <files.length; i ++) {switches.add (ImageTomatrix (files [i])); SwatchEvalues.Add (i, значения [i]); }} catch (Exception e) {System.out.println (files [i] + "не может быть проанализирована"); e.printstacktrace (); }}} public imageParser () {super (); if (Swatches == null || SwatchEvalues == null) {System.out.println («Вы не загрузили образец, сначала загрузите образец!»); }} / *** Подбор значения изображения** @param parsefilepath* Дайте путь изображения* @return возвращать строку* @Throws Exception* / public String parseValue (String parseFilePath) throws exection {stringBuffer result = new StringBuffer (); TargetColors = ImageTomatrix (parseFilePath); // printmatrix (TargetColors); int height = targetcolors.length; int targetwidth = targetColors [0] .length; int width = 0; Итератор It = switches.iterator (); while (it.hasnext ()) {byte [] [] bytes = (byte [] []) it.next (); int temple = байты [0] .length; if (Templen> ширина) ширина = 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, ширина, высота); // System.out.println (i ++); if (ismatrixinbigmatrix (bytes, temp)) {xtag += width; // System.out.println ("new Maxtrix:"); // printmatrix (temp); result.append (swatchevalues.get (i)); разорвать кут; } i ++; } xtag ++; }} return result.toString (); } // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @param source * Source matrix * @param bigmatrix * большая матрица * @return return true, если она существует */ private static final boolean ismatrixinbigmatrix (byte [] [] source, byte [] [] bigmatrix) {if (source == bigmatrix) вернуть true; if (source == null || bigmatrix == null) вернуть false; if (source.length> bigmatrix.length) вернуть false; try {for (int i = 0; i <source.length; i ++) {if (source [i] .length> bigmatrix [i] .length) вернуть 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 сравнение = высота * ширина; for (; i <bigmatrix.length - height+1; i ++) {for (j = 0; j <bigmatrix [i] .length - ширина+1; j ++) {cout: {x = 0; count = 0; for (int k = i; k <height+i; k ++) {y = 0; for (int l = j; l <width + j; l ++) {// system.out.println ("bytes [" + x + "] [" + y + "]" // + "=" + source [x] [y] + "," + "другой [" // + k + "] [ + l +"] = " + bigmatrix [k] [l]; if ((source [x] [y] & bigmatrix [k] [l]) == source [x] [y]) {count ++; } else break cout; y ++; } x ++; } // System.out.println ("count =" + count); if (count == comparecount) return true; }}} вернуть false; } / *** Cut Matrix*** @param источник* Матрица источника* @param x* x координаты* @param y* y координаты* @param ширина* Ширина матрицы* @param высота* высота матрицы* @return Cut Matrix* / private static final byte [] intth, int ytth, int, int ytth, int ytth, int ytth, int ytth, int ytth, int ytth, int ytth, int, int ytth, int, int ytth -ytth, int yt yt y yt ytth byte [] [] resultbytes = new Byte [height] [ширина]; for (int i = y, k = 0; i <height+y; i ++, k ++) {for (int j = x, l = 0; j <ширина+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; } / *** Преобразовать изображение в матрицу матрицы** @param filepath* pail path* @return возвращает матрицу* @throhs Exception* исключение может быть брошено* / private byte [] [] ImageTomatrix (String filePath). int w = image.getWidth (null); int h = image.getheight (null); BufferedImage src = new BufferedImage (w, h, bufferedimage.type_int_rgb); src.getgraphics (). Drawmage (изображение, 0, 0, null); byte [] [] colors = new Byte [h] [w]; for (int i = 0; i <h; i ++) {for (int j = 0; j <w; j ++) {int rgb = src.getrgb (j, i); // Обработка серого пикселей строки 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 ("tepant =" + tepant); / * Преобразовать изображение в 0,1 */ // Здесь можно изменить значение, которое необходимо судить в будущих цветах [i] [j] = (байт) (Al> 127? 0: 1); } // System.out.println (); } вернуть цвета; } / ** * Матрица печати * * @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 (i] [j] == 0). else System.out.print ("1"); } System.out.println (); }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.