Описание Алгоритмов для работы с тем или иным подходом работы
с opencv мы можем найти
во встроенной документации по пути <путь
до opencv>\sources\doc\py_tutorials\
У меня этот путь C:\opencv\sources\doc\py_tutorials\
В дальнейшем описания буду использовать свой путь до файлов opencv.
В дальнейшем описания буду использовать свой путь до файлов opencv.
Пример работы с определением лиц описан в фалах следующей
папки:
C:\opencv\sources\doc\py_tutorials\py_objdetect\py_face_detection
В указанной папке увидим файл py_face_detection.rst, в
котором находится текстовое описание подхода.
Для определения возьмем какое-либо лицо. Я взял по
следующему пути:
С:\opencv\sources\samples\java\clojure\simple-sample\resources\images\lena.png
Теперь,
собственно, откроем netbeans, создадим проект, подключим к нему библиотеку openCV как
описано в предыдущем посте.
Добавим в созданный проект помимо класс Detector, со следующим кодом (описание
кода в комментариях):
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
/**
* Определение лиц.
* @author brudanovom
*/
public class Detector {
public void DetectFace(){
System.loadLibrary(
Core.NATIVE_LIBRARY_NAME ); //Инициализируем библиотеки
/*подгружаем обученный классификатор Хаара*/
String CascadePath;
CascadePath =
"c:\\opencv\\sources\\data\\lbpcascades\\lbpcascade_frontalface.xml";
CascadeClassifier faceDetector = new
CascadeClassifier(CascadePath);
//Задаем путь до картинки с лицом
String ImagePath = new String("c:\\opencv\\sources\\samples\\java\\clojure\\simple-sample\\resources\\images\\lena.png");
System.out.println(ImagePath);
Mat image =
Highgui.imread(ImagePath);
// Определяем наличие лиц на фото
MatOfRect faceDetections = new
MatOfRect();// MatOfRect специальный контейнер прямоугольников типа Rect
faceDetector.detectMultiScale(image,
faceDetections);//непосредственно функция определения
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
//Выводим результаты определения в консоль
// Рисуем определившиеся прямоугольники
на картинке
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new
Point(rect.x, rect.y), new Point(rect.x
+ rect.width,
rect.y + rect.height), new Scalar(0, 255, 0));
}
String filename =
"c:\\DOWNLOADS\\faceDetection.png"; // Задаем путь для сохранения результатов
System.out.println(String.format("Writing %s", filename)); //Пишем о сохранении в консоль
Highgui.imwrite(filename, image);//
Сохраняем результат определения лиц
}
}
Теперь используем созданный класс в функции Main:
public static void main(String[]
args) {
Detector d = new Detector();
d.DetectFace();
}
Результат сохранится в виде следующей картинки:
Итак, в результате мы получили представление об использовании
библиотеки opencv для программирования
в java, попутно
разработав простенькую программку для определения лиц на фотографии. Названия
классов и функций библиотеки в разных версиях opencv могут
отличаться. При разработке не ленитесь смотреть туториалы, входящие в состав opencv.
Комментариев нет:
Отправить комментарий