【问题标题】:Want to store detected cropped images in a file想要将检测到的裁剪图像存储在文件中
【发布时间】:2018-01-30 23:46:21
【问题描述】:

我已在 opencv 中使用 haarcascade 成功检测到人脸。我已经运行了一个循环,它只会裁剪图像的检测部分并存储到系统中。但它只裁剪一张检测到的人脸,其余的人脸不会被裁剪并保存到系统中。我附上我的代码。请帮助解决我的问题。例如。如果图像包含 4 个人,则 haarcascade 检测到 4 张面孔,但循环仅裁剪一张检测到的图像,其余 3 张图像不会被裁剪..!

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 FaceDetection
{

public static void main(String[] args)
{

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);


    CascadeClassifier faceDetector = new CascadeClassifier();

 faceDetector.load("G:\\haarcascade_frontalface_alt.xml");
    //System.out.println ( "Working" );
    // Input image
    Mat image = Imgcodecs.imread("G:\\sample.jpg");

    // Detecting faces
    MatOfRect faceDetections = new MatOfRect();
    faceDetector.detectMultiScale(image, faceDetections);
    System.out.println(String.format("Detected %s faces", 
            faceDetections.toArray().length));
    // Creating a rectangular box showing faces detected
    Rect rectCrop=null;
    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),2);
        rectCrop = new Rect(rect.x, rect.y, rect.width, rect.height);

    }

    Rect[] count = faceDetections.toArray();
    System.out.println(""+count.length);

    // Saving the output image
    String filename = "Ouput.jpg";
    Imgcodecs.imwrite("G:\\"+filename, image);

    Mat markedImage = new Mat(image,rectCrop);

    Imgcodecs.imwrite("G:\\crop1.jpg",markedImage );

}
}

【问题讨论】:

  • 代码有效吗? @omkarlanghe
  • 代码执行成功..谢谢..! @TheOneWhoMade
  • 如果答案有帮助,请使用投票系统下方的复选标记接受答案。 @omkarlanghe

标签: java opencv image-processing


【解决方案1】:

您的代码正在遍历所有这些并选择最后一张面孔,然后保存该面孔。您需要它来 a) 分别裁剪它们并添加将它们标记在一起的元数据,或者 b) 将它们全部裁剪在一起。

对于选项 a,在您的循环中,您需要分别保存每个文件。只需将您保存文件代码移动到循环中并对其进行调整以使其正常工作。

对于选项 b,您可能需要一些额外的软件来将所有面部裁剪在一起。这可以通过多种方式完成。您可以连接所有 a) 像素数组或 b) 单个字节。然后,当您需要找到人与人之间的联系时,您只需再次对文件运行人脸识别软件即可。

【讨论】:

  • 你能建议我怎么做吗? @TheOneWhoMade
  • 两者都有..!!这将帮助我更好地理解..! @TheOneWhoMade
  • 在循环中,您需要单独保存每个文件。只需将您保存文件代码移动到循环中并对其进行调整以使其正常工作。 @omkarlanghe
  • 好的,请..!建议我在哪里更改代码! @TheOneWhoMade
  • 好的,谢谢你,我会在某个时候回复你..!@TheOneWhoMade
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2021-03-09
  • 2013-11-22
  • 2012-11-12
  • 1970-01-01
  • 2018-01-27
相关资源
最近更新 更多