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);
4

1 回答 1

0

检测到人上身rect后:

  1. 移除矩形背景,只保留人的上身。
  2. 将图像二值化。
  3. 应用形态边界算法追踪上身。

例子:

在此处输入图像描述

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();
    }
}
于 2013-12-05T16:29:33.093 回答