Примеры в этой статье делятся исходным кодом распознавания отпечатков пальцев Java и распознавания изображений для вашей ссылки. Конкретный контент заключается в следующем
Основная категория:
Импорт java.awt.image.bufferedImage; import java.util.arraylist; import java.util.list; public class alkingimages earch { / ** * @param args * / public static void main (string [] args) {list <string> hashcodes = new ArrayList <string> (); String fileName = imageHelper.path + "// Images //"; String hashcode = null; for (int i = 0; i <6; i ++) {hashcode = justfingerprint (имя файла + "пример" + (i + 1) + ".jpg"); hashcodes.add (hashcode); } System.out.println ("Resources:"); System.out.println (Hashcodes); System.out.println (); String sourcehashcode = justfingerprint (filename + "source.jpg"); System.out.println («Источник:»); System.out.println (SourceHashCode); System.out.println (); for (int i = 0; i <hashcodes.size (); i ++) {int diftion = hammingdistance (Sourcehashcode, hashcodes.get (i)); System.out.print ("Расстояние Хамминга:"+разница+""); if (indiate == 0) {System.out.println ("source.jpg изображение совпадает с примером"+(i+1)+". jpg"); } else if (разница <= 5) {System.out.println ("source.jpg изображение очень похоже на пример"+(i+1)+". Jpg"); } else if (разница <= 10) {System.out.println ("Изображение Source.jpg несколько похоже на пример"+(i+1)+". Jpg"); } else if (разница> 10) {System.out.println ("Изображение Source.jpg полностью отличается от примера"+(i+1)+". Jpg"); }}} /*** Рассчитайте "расстояние в гамме". * Если биты данных разных не превышают 5, это означает, что два изображения очень похожи; Если они больше 10, это означает, что это две разные картинки. * @param sourcehashcode source hashcode * @param Hashcode сравнение Hashcode */ public static int hammingDistance (String SourceHashcode, String hashcode) {int diftion = 0; int len = sourcehashcode.length (); for (int i = 0; i <len; i ++) {if (sourcehashcode.charat (i)! = hashcode.charat (i)) {divide ++; }} return разница; }/ *** Сгенерировать Image Fingerprint* @param FileName FileName* @return Image Persfint*/ Public Static String ProducefingerPrint (String FileName) {BuffereMage Source = ImageHelper.readpngimage (filename); // Читать файл with = 8; int height = 8; // Первый шаг - уменьшить размер. // уменьшают изображение до размера 8x8, в общей сложности 64 пикселя. Цель этого шага состоит в том, чтобы удалить детали изображения, сохранить только основную информацию, такую как структура, свет и темный, и отказаться от различий в картине, вызванных различными размерами и пропорциями. BufferedImage Thumb = ImageHelper.Thumb (источник, ширина, высота, false); // Второй шаг - упростить цвет. // Поверните уменьшенное изображение на 64 -й серого уровня. То есть, во всех пикселях всего 64 цвета. int [] pixels = new int [ширина * высота]; for (int i = 0; i <width; i ++) {for (int j = 0; j <height; j ++) {pixels [i * height+j] = imageHelper.rgbtogray (thumb.getrgb (i, j)); }} // Третий шаг - рассчитать среднее. // Рассчитайте среднее значение серого по всем 64 пикселям. int avgpixel = imageHelper.average (pixels); // Шаг 4, сравните серого цвета пикселей. // Сравните серогойский состав каждого пикселя со средним значением. Если он больше или равен среднему значению, оно обозначено как 1; Если это меньше среднего значения, оно обозначается как 0. int [] comps = new int [ширина * высота]; for (int i = 0; i <comps.length; i ++) {if (pixels [i]> = avgpixel) {comps [i] = 1; } else {comps [i] = 0; }} // Шаг 5, вычислите значение хэша. // Сочетайте результаты сравнения предыдущего шага вместе, чтобы сформировать 64-битное целое число, которое является отпечатками этой картины. Порядок комбинаций не важен, просто убедитесь, что все изображения находятся в одном порядке. StringBuffer hashcode = new StringBuffer (); for (int i = 0; i <comps.length; i + = 4) {int result = comps [i] * (int) math.pow (2, 3) + comps [i + 1] * (int) math.pow (2, 2) + comps [i + 2] * (int) math.pow (2, 1) + comps [i + 2]; hashcode.append (binarytohex (результат)); } // После получения отпечатков пальцев вы можете сравнить разные картинки, чтобы увидеть, сколько бит отличается в 64-битном. return hashcode.toString (); } / ** * Преобразовать двоичный в шестнадцатеричный * @param int binary * @return char hex * / private static byanytohex (int binary) {char ch = ''; Switch (двоичный) {case 0: ch = '0'; перерыв; Случай 1: CH = '1'; перерыв; Случай 2: CH = '2'; перерыв; Случай 3: CH = '3'; перерыв; Случай 4: CH = '4'; перерыв; Случай 5: CH = '5'; перерыв; Случай 6: CH = '6'; перерыв; Случай 7: CH = '7'; перерыв; Случай 8: CH = '8'; перерыв; Случай 9: CH = '9'; перерыв; Случай 10: ch = 'a'; перерыв; Случай 11: CH = 'B'; перерыв; Случай 12: CH = 'C'; перерыв; Случай 13: CH = 'D'; перерыв; Случай 14: CH = 'E'; перерыв; Случай 15: CH = 'f'; перерыв; по умолчанию: ch = ''; } return ch; }} Инструменты:
Импорт java.awt.alphacomposite; импорт java.awt.color; import java.awt.font; import java.awt.graphics2d; импорт java.awt.image; импорт java.awt.renderinghints; импорт java.awt.geom.affineTransform; импорт. java.awt.image.colormodel; import java.awt.image.writableraster; импорт java.io.file; импорт java.io.fileinputstream; импорт java.io.filenotfoundexception; импорт java.io.fileOutputStream; import java.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io.io. javax.imageio.imageio; import com.sun.image.codec.jpeg.imageformatexception; import com.sun.image.codec.jpeg.jpegcodec; импорт com.sun.image.codec.jpeg.jpegimagedecoder; import com.sun.mage.codec.jpeg.jpegagedecoder; import com.sun.mage.codec.jpeg.jpeg* jpegagedecoder; import com.sun.mage.codec.jpeg.jpeg. Класс, в основном для обработки водяного знака изображения * * @author 025079 * @version [номер версии, 2011-11-28] * @see [Связанный класс/метод] * @since [продукт/версия модуля] */public class ImageHelper {// Project Root Directory Path Public Static Latch Path = System.getProperty ("user.dir"); /** * Сгенерировать миниатюры <br/> * save: imageio.write (bufferedimage, imgtype [jpg/png/...], file); * * @param источник * исходное изображение * @param ширина * ширина миниатюры * Высота миниатюры * Высота миниатюры * @param b * Является ли она в равной степени масштабирована * */ public static bufferemage Большой палец (источник BufferedImage, int width, int height, boolean b) {// targetw, targeth hargeth windsemage и width wildshy intry type = getpe. BuffereMage Target = null; Double sx = (двойная) ширина / source.getWidth (); двойной sy = (двойной) высота / source.getheight (); if (b) {if (sx> sy) {sx = sy; width = (int) (sx * source.getwidth ()); } else {sy = sx; высота = (int) (sy * source.getheight ()); }} if (type == bufferedimage.type_custom) {// colormodel ручной работы cm = source.getcolormodel (); Writableraster raster = cm.createcapatiblewritableraster (ширина, высота); логический alphapremultiplied = cm.isalphapremultiplied (); target = new BufferedImage (CM, растровый, алфапремультированный, нулевый); } else target = new BufferedImage (ширина, высота, тип); Graphics2d g = target.creategraphics (); // более гладкий, чем exlax: g.setrenderinghint (renderinghints.key_rendering, renderinghints.value_render_quality); g.drawrenderedimage (Source, AffineTransform.getScaleInstance (SX, SY)); g.dispose (); вернуть цель; } / ** * Изображение Watermark * * @param imgpath * ожидаемое изображение * @param markpath * watermark image * @param x * Воотерна Markpath, int x, int y, float alpha) {try {// Загрузите изображение в файле изображения img = imageio.read (new File (imgpath)); BufferedImage Image = new BufferedImage (img.getWidth (null), img.getheight (null), bufferedimage.type_int_rgb); Graphics2d g = image.creategraphics (); g.drawimage (img, 0, 0, null); // Загрузите изображение изображения водяного знака SRC_BIAO = Imageio.read (новый файл (Markpath)); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); g.drawimage (src_biao, x, y, null); g.dispose (); // Сохранить обработанный файл fileOutputStream Out = new FileOutputStream (imgpath); Jpegimageencoder encoder = jpegcodec.createjpegenceder (out); encoder.encode (image); out.close (); } catch (Exception e) {e.printstackTrace (); }} /** * Текст водяной марка * * @param imgpath * ожидаемое изображение * @param текст * текст водяного знака * @param font * Информация о шрифте водяного знака * @param color * watermark font * @param x * x * Координатный значение x x В верхнем левом углу изображения * @param y * Водяной знака. 1.0f */ public static void textmark (String imgpath, String Text, шрифт шрифта, цвет цвета, int x, int y, float alpha) {try {font dfont = (font == null)? новый шрифт ("宋体", 20, 13): шрифт; Image img = imageio.read (новый файл (imgpath)); BufferedImage Image = new BufferedImage (img.getWidth (null), img.getheight (null), bufferedimage.type_int_rgb); Graphics2d g = image.creategraphics (); g.drawimage (img, 0, 0, null); g.setcolor (цвет); g.setfont (dfont); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); g.drawstring (текст, x, y); g.dispose (); FileOutputStream OUT = new FileOutputStream (imgpath); Jpegimageencoder encoder = jpegcodec.createjpegenceder (out); encoder.encode (image); out.close (); } catch (Exception e) {System.out.println (e); }} / *** Читать JPEG Image* @param FileName FileName* @return BuffereMage объект изображения* / public Static BuffereMage readjpegimage (String fileName) {try {inputStream ImageIn = new FileInputStream (новый файл (файл имени)); // Получить входной энкодер и кодировать поток файла в формате JPG JPegimagedEcoder decoder = jpegcodec.createjpegdecoder (imagein); // Получить кодированный объект изображения BufferedImage SourceImage = decoder.decodeasBufferedImage (); вернуть SourceMage; } catch (filenotFoundException e) {e.printstackTrace (); } catch (imageformatexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); } return null; } / *** Читать JPEG Picture* @param FileName FileName* @return BufferedImage объект изображения* / public Static BufferedImage readpngimage (String fileName) {try {file input -file = new File (fileName); BufferedImage SourceImage = imageIo.read (inputFile); вернуть SourceMage; } catch (filenotFoundException e) {e.printstackTrace (); } catch (imageformatexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); } return null; } / *** Расчет значения GreyScale* @param Pixels Pixels* @return int greyscale* / public static int rgbtogray (int pixels) {// int _alpha = (pixels >> 24) & 0xff; int _red = (pixels >> 16) & 0xff; int _green = (pixels >> 8) & 0xff; int _blue = (pixels) & 0xff; return (int) (0,3 * _red + 0,59 * _green + 0,11 * _blue); } / *** Рассчитайте среднее значение массива* @param Pixels Array* @return int Среднее* / public static int vardy (int [] pixels) {float m = 0; for (int i = 0; i <pixels.length; ++ i) {m += pixels [i]; } m = m / pixels.length; возврат (int) m; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.