绘制检测到的对象的形状?

时间:2013-11-11 23:04:02

标签: java opencv drawing computer-vision

我成功检测到照片中人物的上半身。但我现在能做的就是在上身周围画一个矩形。如何跟踪上半身?,即在检测到的上半身周围画一条线(看起来像上半身)。我正在使用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 个答案:

答案 0 :(得分:0)

检测到人们上半身:

  1. 删除rect背景,只保留上半身。
  2. 将图像二值化。
  3. 应用形态学边界算法追踪上半身。
  4. 示例:

    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();
        }
    }