【问题标题】:opencv face recognition, get coordinates of "bounding box" around imageopencv人脸识别,获取图像周围“边界框”的坐标
【发布时间】:2015-08-12 01:00:44
【问题描述】:

今天我正在用 java 中的 opencv 尝试一个项目,我正在关注this 代码。我修改它以使用 opencv 3.0.0。基本上,我试图从一个文件夹中获取一堆图像,然后裁剪人脸识别找到人脸的图片。所以问题是我似乎无法获得围绕图像的“边界框”的坐标(bounding box)。我想将图像裁剪到方框中,有人知道我在说什么或做什么吗?

感谢任何帮助! :) 我是(非常)初学者程序员。谢谢!

import java.io.File;
import java.io.IOException;
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.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;

public class hello {
    public static void main(String[] args) throws IOException {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    System.out.println("\nRunning FaceDetector");

    CascadeClassifier faceDetector = new CascadeClassifier("C:/Users/Family/workspace/detect face/haarcascade_frontalface_alt.xml");

    File folder = new File("C:\\Users\\Family\\Downloads\\Photos");
    File[] listOfFiles = folder.listFiles();

    for (int j = 0; j < listOfFiles.length; j++) {
        System.out.println(listOfFiles[j]);
    }

    for (int i = 0; i < listOfFiles.length-1; i++){
        String picname = listOfFiles[i].toString();

        System.out.println("reading: " + listOfFiles[i]);

        Mat image = Imgcodecs.imread(picname);

        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image, faceDetections);

        System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));


        for (Rect rect : faceDetections.toArray()) {
            Imgproc.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 = "monkey.png";
        System.out.println(String.format("Writing %s", filename));
        Imgcodecs.imwrite(filename, image);

    }
}

}

【问题讨论】:

    标签: java opencv coordinates


    【解决方案1】:

    试试这个方法..

    rect.getX(); //for getting x cordinates
    rect.getY(); //for getting y cordinates
    rect.getWidth(); //for getting width
    rect.getHeight(); //for getting height
    

    这张图片会对你有所帮助。

    【讨论】:

    • 谢谢!这对我来说几乎解决了,:D 在看了你说的之后我想出了代码。
    • 来吧...一切顺利...不要忘记分享您的问题..也不要忘记投票给您的最佳答案..
    • 小心...宽度包括最左边的坐标。 x &lt;= pt.x &lt; x+width not &lt;= x+width,高度也是如此(文档here)。如文档中所述,您可以使用 rect.contains() 确认这一点。
    猜你喜欢
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2015-07-05
    • 2016-09-18
    • 1970-01-01
    • 2021-08-29
    • 2018-09-15
    相关资源
    最近更新 更多