2013-11-11 5 views
1

Я успешно обнаружил верхнюю часть лица на картинке. Но теперь я могу сделать прямоугольник вокруг верхней части. Как я могу отследить верхнюю часть ?, т. Е. Нарисуйте линию (похожую на верхнюю) вокруг обнаруженного верхнего тела. Я работаю с OpenCV. Вот код из системы обнаружения.Рисование формы обнаруженного объекта?

if(new File("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml\\").isFile()) 
     { System.out.println("file there"); } 
     cascadeClassifier = new CascadeClassifier("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml"); 
     inputPic = Highgui.imread(picSrcDir + picName); 
     MatOfInt intw = new MatOfInt(1); 
     MatOfDouble dble = new MatOfDouble(1.05); 
     rect = new MatOfRect(); 
     cascadeClassifier.detectMultiScale(inputPic, rect, intw, dble); 
     Scalar color = new Scalar(0, 0, 255); 
     System.out.println("Number Of Hits: " + rect.toArray().length); 
     Rect[] rectArr = rect.toArray(); 
     System.out.println(rectArr.length); 
     int i=0; 
     for(Rect recta : rectArr){ 
      System.out.println(rectArr[i]); i++; 
      Core.rectangle(inputPic, new Point(recta.x, recta.y), new Point(recta.x+recta.width, recta.y+recta.height), color); 
     } 
     Highgui.imwrite(picName, inputPic); 
+1

Вы должны смотреть на край и обнаружение особенностей, вы на полпути Выяснив границы верхней части тела – arynaq

ответ

0

После обнаружения людей иррегВьего прямоугольника:

  1. Удаляет фон прямоугольника, сохраняя только лицо иррегВьего.
  2. Binarize изображение.
  3. Применить морфологический алгоритм границы для прослеживания верхней части тела.

Пример:

enter image description here

OpenCV предоставляет эти алгоритмы. Однако приведенный выше пример был разработан с использованием Marvin. Исходный код представлен ниже:

public class TraceShape { 

    public TraceShape(){ 
     // Load Plug-in 
     MarvinImagePlugin boundary = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.boundary"); 

     // Load image 
     MarvinImage image = MarvinImageIO.loadImage("./res/person.jpg"); 

     // Binarize 
     MarvinImage binImage = MarvinColorModelConverter.rgbToBinary(image, 245); 
     MarvinImageIO.saveImage(binImage, "./res/person_bin.png"); 

     // Boundary 
     boundary.process(binImage.clone(), binImage); 
     MarvinImageIO.saveImage(binImage, "./res/person_boundary.png"); 
    } 

    public static void main(String[] args) { 
     new TraceShape(); 
    } 
} 
+0

Спасибо, хотя мои данные изменились, я по-прежнему можно использовать бинаризации метод, так что ура. –

+0

Привет @Gabriel Я получаю пустое изображение при сохранении 'person_boundary.png' – juanmf

+1

@juanmf У меня была проблема с симпатией, прежде чем я понял и изменил' border.process (binImage, binImage); 'to' border.process (binImage.clone(), binImage); – ansvver

Смежные вопросы