이 기사는 참조에 대한 간단한 Javase 이미지 확인 코드 인식 프로그램을 공유합니다. 특정 내용은 다음과 같습니다
먼저, 그림을 샘플링 한 다음 샘플을 회색으로 만들어야합니다. 즉, 흑백으로 바꿔야합니다.
그런 다음이 클래스를 사용하여 객체 파일을 분석 할 수 있습니다. 이 수업은이 수업을 구현하는 방법에 대해 매우 분명하다고 생각합니다. 샘플을 왼쪽에서 수평으로 이동하고 적절한 것과 일치하는 경우 좌표를 다음 위치로 조정하는 것입니다.
이 프로그램은 3 년 전에 작성되었지만 나중에는 깊이 쓰여지지 않았습니다. 이미지 인식은 매우 깊은 분야로, 깊은 수학 기술과 사고 능력이 필요합니다. Java 프로그램은 효율적이지 않으며 변형 또는 스트레칭 사진을 인식 할 수 없습니다. 그러나 그 시대에는 충분했습니다. 더 나은 오픈 소스 이미지 인식 코드가 있으면 통신하려면 편지를 작성하십시오 :)
/*** 웹 사이트 검증 코드 분석에 적합한 이미지 구문 분석 엔진. * 먼저, 샘플을로드하고, 구문 분석기는 왼쪽에서 오른쪽으로 수평으로 스캔하고 샘플에서 발견되면 자동으로 기록됩니다. * 물론,이 프로그램은 샘플에 적합하지 않으며 독특하지 않습니다. 즉, 식별 할 그림은 스케일링되거나 좌표가 변경되거나 변형됩니다. 이 프로그램은 그러한 식별을 수행 할 수 없습니다. * 그림의 색상이 크게 변경되면이 프로그램에 문제가있을 수 있습니다. 물론, 표준 값을 0,1 행렬로 변환하기위한 표준으로 표준 값을 선택할 수 있습니다. * * 샘플 생산 : 샘플을 그레이 스케일 모드로 변환하십시오. 두 가지 색상 만 포함하는 것이 가장 좋습니다. 물론 변환하지 않으면 변환도 도와 드리겠습니다. * */import java.awt.image; import java.awt.image.bufferedimage; import java.io.file; import java.util.arraylist; import java.util.iterator; import java.util.list; import javav.imageio.imageio; public imageparser {// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ swatcheValues = null; // 매트릭스 개인 바이트 [] [] TargetColors; // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 값 [i] = string.valueof (i); } imageParser parse = new ImageParser (파일, 값); Long Start = System.CurrentTimeMillis (); {// 이미지 System.out.println을 구문 분석합니다 (parse.parsevalue ( "d :/workspace/szxclientapp/res/validatenum"); long sincetime = system.currenttimeMillis (); System.out.println ( "시간이 소요 된 시간 =" + (Sincetime -Start)); } catch (예외 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 (imageetomatrix (files [i])); swatchevalues.add (i, 값 [i]); }} catch (예외 e) {system.out.println (파일 [i] + "구문 분석 할 수 없음"); e.printstacktrace (); }}} public ImageParser () {super (); if (swatches == null || swatchevalues == null) {System.out.println ( "샘플을로드하지 않았으므로 먼저 샘플을로드하십시오!"); }} / *** 이미지의 값을 구문 분석** @param parsefilepath* 이미지 경로 제공* @return 문자열* @throws 예외* / public String parsevalue (String parsefilepath) 예외 {stringbuffer result = new StringBuffer (); TargetColors = imagetomatrix (parsefilepath); // printmatrix (targetColors); int height = targetcolors.length; int targetWidth = targetColors [0] .length; int 너비 = 0; 반복자 it = switches.iterator (); while (it.hasnext ()) {byte [] [] bytes = (byte [] []) it.next (); int temple = 바이트 [0] .length; if (templen> 너비) 너비 = 템플 렌; } // system.out.println ( "maxWidth =" + 너비); // 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 (); 바이트 [] [] temp = splitmatrix (targetColors, Xtag, 0, 너비, 높이); // system.out.println (i ++); if (ismatrixinbigmatrix (bytes, temp)) {xtag += 너비; // system.out.println ( "New Maxtrix :"); // printmatrix (temp); result.append (swatchevalues.get (i)); 휴식 cout; } i ++; } xtag ++; }} return result.toString (); } // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @param source * Source matrix * @param bigmatrix * 큰 행렬 * @return이 존재하는 경우 true */ private static final boolean ismatrixinbigmatrix (byte [] [] source, byte [] [] bigmatrix) {if (source == bigmatrix) return 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 compareCount = 높이 * 너비; for (; i <bigmatrix.length+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 ( "바이트 [" + x + "] [" + y + "]"// + "=" + source [x] [y] + "," + "기타 ["// + k + "] [" + l + "] =" + bigmatrix [l]); if ((출처 [x] [y] & bigmatrix [k] [l]) == 출처 [x] [y]) {count ++; } else break cout; Y ++; } x ++; } // system.out.println ( "count =" + count); if (count == compareCount) true를 반환합니다. }}} 거짓을 반환합니다. } / *** 컷 행렬** @param 소스* 소스 매트릭스* @param x* x 좌표* @param y* y 좌표* @param width* matrix* @param height* @return cut matrix* / private static final byte [] [] splittmatrix (byte []]] 바이트 [] [] resultBytes = 새로운 바이트 [높이] [너비]; for (int i = y, k = 0; i <height+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 + "] =" + resultBytes [k] [l]); }} return resultBytes; } / *** 이미지를 매트릭스 배열로 변환* @param filepath* 파일 경로* @return 행렬* @throws 예외를 반환* 예외가 던져 질 수 있습니다* / private byte [] [] imageetomatrix (String FilePath)는 예외 {// image image.read (fillepath (fillepath))에서 예외를 던졌습니다. int w = image.getWidth (null); int h = image.getheight (null); BufferedImage src = 새로운 bufferedImage (w, h, bufferedimage.type_int_rgb); src.getGraphics (). DrawImage (image, 0, 0, null); 바이트 [] [] 색상 = 새로운 바이트 [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); 문자열 sgreen = integer.tohexstring (rgb) .Substring (4, 6); 문자열 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); / * 이미지를 0,1 *///////////////// // 미래의 색상에서 판단 해야하는 값으로 수정할 수 있습니다 [i] [j] = (byte) (al> 127? 0 : 1); } // system.out.println (); } 반환 색상; } / ** * print matrix * * @param matrix * / private static final void printmatrix (byte [] [] matrix) {for (int i = 0; i <matrix.length; i ++) {for (int j = 0; else system.out.print ( "1"); } system.out.println (); }}}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.