Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否绘制检测到的对象的形状?_Java_Opencv_Drawing_Computer Vision - Fatal编程技术网

Java 是否绘制检测到的对象的形状?

Java 是否绘制检测到的对象的形状?,java,opencv,drawing,computer-vision,Java,Opencv,Drawing,Computer Vision,我成功地在一张照片中发现了那个人的上半身。但我现在能做的就是在上半身周围画一个矩形。如何跟踪上半身?即,在检测到的上半身周围画一条线(看起来像上半身)。我正在使用OpenCV。 这是检测系统的一些代码 if(new File("E:\\OpenCV\\opencv\\data\\haarcascades\\haarcascade_mcs_upperbody.xml\\").isFile()) { System.out.println("file there"); }

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

检测到人的上半身直立后:

  • 移除rect背景,只保留人的上半身
  • 对图像进行二值化
  • 应用形态边界算法对上半身进行跟踪
  • 示例:

    OpenCV提供了这些算法。但是,上面的示例是使用。源代码如下所示:

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

    你需要研究边缘和特征检测,你已经找到了上半身的界限。谢谢,虽然我的规格已经改变,但我仍然可以使用二值化方法,所以干杯。嗨@Gabriel,我在保存
    person\u boundary.png时得到一张空图像。在我意识到并更改
    boundary.process(binImage,binImage)之前,我遇到了像你一样的问题
    to
    boundary.process(binImage.clone(),binImage)