Эта статья разделяет конкретный код для Java, чтобы реализовать распознавание лиц для вашей ссылки. Конкретный контент заключается в следующем
Официальный файл загрузки и установки, возьмите Win7 в качестве примера, загрузите OpenCV-2.4.13.3-VC14.exe
После установки, в каталоге сборки, в каталоге сборки, D:/OpenCV/Build/Java, получите OpenCV-2413.jar, копируйте в каталог проекта, а также требуют файла DLL и каждого файла распознавания XML для определения различных функций (лицо, боковая поверхность, глаза и т. Д.)
Справочник DLL: D: /opencv/build/java/x64/opencv_java2413.dll
Справочник XML: D: /opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml (в каталоге существуют различные идентификационные файлы)
Структура проекта:
Конкретный код: Поскольку вам необходимо использовать файл DLL OpenCV, его можно поместить в путь библиотеки Java или в JRE Lib. Он может быть размещен в каталоге System32 под Windows, или он может быть динамически загружен в код следующим образом:
Пакет OpenCV; Импорт com.sun.scenario.effect.imagedata; Импорт org.opencv.core.*; Импорт org.opencv.core.point; Импорт org.opencv.highgui.highgui; Импорт org.opencv.imgproc.imgproc; Импорт org.opencv.objdetect.cascadeclassifier; Импорт javax.imageio.imageio; импортировать javax.swing.*; Импорт java.awt.*; Импорт java.awt.image.bufferedImage; Импорт java.io.file; импортировать java.io.ioexception; импортировать java.util.arrays; импортировать java.util.vector; /*** Создано администратором 2017/8/17. */public class test {static {// import opencv библиотека строка opencv path = system.getproperty ("user.dir") + "// opencv // x64 //"; String libpath = System.getProperty ("java.library.path"); String a = opencvpath + core.native_library_name + ".dll"; System.Load (openCVPath + core.native_library_name + ".dll"); } public Static String getCutpath (String filePath) {String [] splitPath = filePath.split ("//". "); вернуть SplitPath [0]+"Cut"+"."+SplitPath [1]; } public static void Process (string Original, String Target) Throws Exception {string riginalCut = getCutpath (Original); String TargetCut = getCutpath (Target); if (detectface (Original, OriginalCut) && detectface (target, targetCut)) {}} public Static Boolean Detectface (String ImagePath, String Outfile) THRES Exception {System.out.println ("/nrunning detectfedfacemo"); // Создать распознавание лица из файла конфигурации lbpcascade_frontalface.xml, который расположен в каталоге установки OpenCV. Cascadeclassifier facedetector = new cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); Mat image = highgui.imread (imagePath); // Обнаружение лица в картинке MatofRect Facedetections = new MatofRect (); facedetector.detectmultiscale (изображение, Facedetections); System.out.println (string.format ("обнаруженные %s лица", facedetections.toarray (). Length)); Rect [] rects = facedetections.toarray (); if (rects! = null && rects.length> 1) {бросить новое runtimeexception ("более одного лица"); } // Нарисуйте коробку вокруг каждого распознаваемого лица прямой rect = rects [0]; Core.rectangle (изображение, новая точка (rect.x-2, rect.y-2), новая точка (rect.x + rect.width, rect.y + rect.height), новый скаляр (0, 255, 0)); Mat sub = image.submat (rect); Mat mat = new Mat (); Размер = новый размер (300, 300); Imgproc.resize (sub, mat, size); // поиск лица и сохранить return highgui.imwrite (outfile, mat); // Сохранить результат в файл // string filename = "c: //users//administrator//desktop//opencv//fedetection.png"; // System.out.println (string.format («Написание %s», имя файла)); // highgui.imwrite (имя файла, изображение); } public static void setAlpha (String ImagePath, String outfile) { / *** Добавить тестовые элементы* Прочитайте изображение и нарисуйте его в полупрозрачный* / try {imageicon imageicon = new imageicon (imagePath); BufferedImage BufferedImage = new BufferedImage (imageicon.geticonWidth (), imageicon.geticOnheight (), bufferedimage.type_4byte_abgr); Graphics2d g2d = (graphics2d) bufferedimage.getgraphics (); g2d.drawimage (imageicon.getimage (), 0, 0, imageicon.getimageobserver ()); // цикл каждой точки пикселя и измените альфа -значение точки пикселя int alpha = 100; for (int j1 = bufferedimage.getminy (); j1 <bufferedimage.getheight (); j1 ++) {for (int j2 = bufferedimage.getminx (); j2 <bufferemage.getwidth (); j2 ++) {int rgb = bufferedimage.getrgb (j2, j1); rgb = ((альфа + 1) << 24) | (RGB & 0x00ffffff); BufferedImage.setrgb (J2, J1, RGB); }} g2d.drawimage (BufferedImage, 0, 0, imageicon.getimageObserver ()); // Сгенерировать изображение как png imageio.write (BufferedImage, «Png», новый файл (Outfile)); } catch (Exception e) {e.printstackTrace (); }} частный static void watermark (строка A, строка B, String outfile, float alpha) бросает ioException {// Получить базовую карту bufferedimage buffimg = imageio.read (new File (a)); // Получить карту слоев BufferedImage waterimg = imageio.read (новый файл (b)); // Создать объект Graphics2D и нарисовать на базовой карте объект Graphics2d G2D = buffimg.creategraphics (); int waterimgwidth = waterimg.getwidth (); // Получить ширину карты слоя int waterimgheight = waterimg.getheight (); // Получить высоту карты слоя // Реализация смешивания и прозрачных эффектов в графике и изображениях G2D.setComposite (Alphacomposite.getinstance (alphacomposite.src_atop, alphaposite.geinstance (alphacomposite.src_atop, alphaposite.getinstance (alphacomposite.src_atop, alphaposite.getinstance. // рисовать g2d.drawimage (waterimg, 0, 0, waterimgwidth, waterimgheight, null); G2D.Dispose (); // Выпустить системные ресурсы, используемые в графическом контексте // Сгенерировать изображение как png imageio.write (buffimg, «png», новый файл (Outfile)); } public Static Boolean MergesImple (BufferedImage Image1, BufferedImage Image2, int posw, int posh, file -fileOutput) {// слияние двух изображений int w1 = image1.getWidth (); int h1 = image1.getheight (); int w2 = image2.getWidth (); int h2 = image2.getheight (); BufferedImage ImagesAved = New BufferedImage (W1, H1, BufferedImage.type_int_argb); Graphics2d g2d = imagesaved.creategraphics (); // Добавить следующий код, чтобы сделать фон прозрачный G2D.Drawimage (Image1, NULL, 0, 0); Image1 = g2d.getDeviceConfiguration (). CreateCompatibleImage (W1, W2, Transparency.TransLucent); G2D.Dispose (); g2d = image1.creategraphics (); // конец фонового прозрачного кода // for (int i = 0; i <w2; i ++) {// for (int j = 0; j <h2; j ++) {// int rgb1 = image1.getrgb (i+posw, j+posh); // int rgb2 = image2.getrgb (i, j); // if (rgb1! = rgb2) {// // rgb2 = rgb1 & rgb2; //} // ImagesAved.SetRGB (i + posw, j + posh, rgb2); //} //} boolean b = false; try {b = imageio.write (imageaved, "png", fileOutput); } catch (ioException IE) {ie.printStackTrace (); } return b; } public static void main (string [] args) бросает исключение {string a, b, c, d; a = "c: //users//administrator//desktop//opencv//zzl.jpg"; d = "c: //users//administrator//desktop//opencv//cgx.jpg"; // процесс (a, d); a = "c: //users//administrator//desktop//opencv//zzlcut.jpg"; d = "c: //users//administrator//desktop//opencv//cgxcut.jpg"; Cascadeclassifier facedetector = new cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); Cascadeclassifier eyeedetector1 = new cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_eye.xml"); Cascadeclassifier eyedetector2 = new cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_eye_tree_eyeglasses.xml"); Mat image = highgui.imread ("c: //users//administrator//desktop//opencv//gakki.jpg"); // Обнаружение Facedetections на картинке MatofRect Facedetections = new MatofRect (); //eyedetector2.detectmultiscale(image, facedetections); Vector <Rect> объекты; EyeDetector1.DetectMultiscale (изображение, Facedetections, 2,0,1,1, новый размер (20,20), новый размер (20,20)); Rect [] rects = facedetections.toarray (); Прямой глаз, глаз; eye = rects [0]; eyeb = rects [1]; System.out.println ("A-Center Comportinate" + Eye.x + "и" + Eye.y); System.out.println ("B-Центер Координата" + Eyeb.x + "и" + Eyeb.y); // Получить угол двух глаз двойной dy = (eekb.y-eyea.y); Double dx = (eyeb.x-eyea.x); double len = math.sqrt (dx*dx+dy*dy); System.out.println ("dx is"+dx); System.out.println ("dy is is"+dy); System.out.println ("len is"+len); двойной угол = math.atan2 (math.abs (dy), math.abs (dx))*180.0/math.pi; System.out.println («Угол is»+угол); для (прямое прямое: facedetections.toarray ()) {core.rectangle (image, new Point (rect.x, rect.y), новая точка (rect.x + rect.width, rect.y + rect.height), новый скаляр (0, 255, 0)); } String filename = "c: //users//administrator//desktop//opencv//ouput.png"; System.out.println (string.format («Написание %s», имя файла)); Highgui.imwrite (имя файла, изображение); // watermark (a, d, "c: //users//administrator//desktop//opencv//zzltm2.jpg", 0.7f); // // // // Читать изображение без изменения исходной информации изображения // mat image1 = highgui.imread (a); // mat image2 = highgui.imread (d); // mat mat1 = new Mat (); Mat mat2 = new mat (); // размер = новый размер (300, 300); // imgproc.resize (image1, mat1, size); // imgproc.resize (image2, mat2, size); // mat Mat3 = новый мат (размер, cvtype.cv_64f); // core.AddDweeSeled (MAT1, 0,5, MAT2, 1, 0, MAT3); // // // // highgui.imwrite ("c: //users//administrator//desktop//opencv//add.jpg", mat3); // // mergesImple (imageio.read (новый файл (a)), // imageio.read (новый файл (d)), 0,0, // новый файл ("c: //users//administrator//desktop//opencv//add.jpg")); }}Окончательный эффект: рядом с лицом есть зеленая граница, а изображение зеленой границы можно снять, чтобы создать изображение лица
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.