如何使用VideoCrop裁剪检测到的面部并将其存储在使用OpenCV Java的文件夹中?

法尔瓦·安萨里(Farwa Ansari)

我正在使用OpenCV 2.4.9,Java语言和Eclipse。我的面部检测代码如下。问题是如何裁剪出检测到的脸部并将其存储在文件夹中?

我正在为此努力,但无法获得所需的输出。

package code03;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

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.highgui.VideoCapture;
import org.opencv.objdetect.CascadeClassifier;

public class VideoPanel2 extends JPanel implements ActionListener
{
    private static final long serialVersionUID = 1L;
    //***********************************************************************************************
    private BufferedImage image;
    int count = 1;
    //***********************************************************************************************
    public VideoPanel2()
    {
        super();
    }
    //***********************************************************************************************
    public BufferedImage getimage()
    {
        return image;
    }
    //***********************************************************************************************
    public void setimage(BufferedImage newimage)
    {
        image = newimage;
        return;
    }
    //***********************************************************************************************
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);   
        if (this.image==null) return;         
         g.drawImage(this.image,10,492,650,43,this.image.getWidth(),this.image.getHeight(), count, count, null);
    }
    //***********************************************************************************************

    public void DatainIt() throws Exception{
        JFrame frame = new JFrame("Face Detection");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,800);

        System.loadLibrary("opencv_java249");
        CascadeClassifier faceDetector = new CascadeClassifier("./res/haarcascade_frontalface_alt.xml");
        //CascadeClassifier faceDetector = new CascadeClassifier("./res/lbpcascade_frontalface.xml");
        VideoPanel2 vidPanel = new VideoPanel2();
        frame.setContentPane(vidPanel);

        //BUTTON
        JButton save = new JButton("Add a new Person");
        //save.setBounds(2, 2, 30, 80);
        JPanel pbutton = new JPanel();
        pbutton.add(save);
        //TextField
        JTextField p_name = new JTextField(25);
        frame.add(p_name);
        frame.add(pbutton);
        frame.setVisible(true);
        save.addActionListener(this);

        Mat webcam_image = new Mat();
        MatToBufImg mat2Buf = new MatToBufImg();

        VideoCapture capture = new VideoCapture(0);
        if(capture.isOpened())
        {
            Thread .sleep(100); //Give time to webcam to initialize itself
            while(true)
            {
                capture.read(webcam_image);
                if(!webcam_image.empty())
                {
                    frame.setSize(webcam_image.width()+40, webcam_image.height()+60);
                    MatOfRect faceDetections = new MatOfRect();
                    faceDetector.detectMultiScale(webcam_image, faceDetections);
                    for(Rect rect : faceDetections.toArray())
                    {
                        Core.rectangle(webcam_image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255,0));
                        //Mat croppedImage = setimage(rect);

                    }
                    mat2Buf.setMatrix(webcam_image, ".jpg");

                    //Highgui.imwrite("webcam_image.jpg", faceDetections);
                    //File file = new File("Image" + "." + ".jpg");
                    //ImageIO.write((RenderedImage) webcam_image, ".jpg", file);
                    vidPanel.setimage(mat2Buf.getBufferedImage());
                    vidPanel.repaint();

                    // get the video stream
                    //BufferedImage bi = mat2Buf.getBufferedImage();//getimage();
                    //bi.getSubimage(arg0, arg1, arg2, arg3);
                    //File outputfile= new File("D:\\Java Project\\FaceRecognition\\src\\code03\\Face Database\\saved.jpg");
                    //ImageIO.write((RenderedImage) bi, "jpg", outputfile);

                }
                else
                {
                    System.out.println("Problems with WebCam Capture");
                    break;
                }
            }
        }//end if
        capture.release();
    }//end DatainIt()
    //***********************************************************************************************
    public static void main(String arg[]) throws Exception{
        VideoPanel2 vid = new VideoPanel2();
        vid.DatainIt();
    }//end main
    //***********************************************************************************************   
    public void actionPerformed(ActionEvent arg0) {

    }

}//end of class

此类中使用的其他文件的代码为:

package code03;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.highgui.Highgui;

public class MatToBufImg{
    Mat matrix;
    MatOfByte mob;
    String fileExten;
public MatToBufImg(){

}

public MatToBufImg(Mat amatrix, String fileExt){
    matrix = amatrix;
    fileExten = fileExt;
}
public void setMatrix(Mat amatrix, String fileExt){
    matrix = amatrix;
    fileExten = fileExt;
    mob = new MatOfByte();
}
public BufferedImage getBufferedImage(){
    Highgui.imencode(fileExten, matrix, mob);
    byte[] byteArray = mob.toArray();
    BufferedImage bufImage = null;
    try{
        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage = ImageIO.read(in);
    }catch(Exception e){
        e.printStackTrace();
    }
    return bufImage;
    }
}
萨拉布高

在您的代码中,您将Face矩形检测为MatOfRect并在视频上绘制一个矩形。

Core.rectangle(webcam_image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255,0));

在这里,您已经有了所需图像的投资回报率。因此,将框架的roi部分裁剪为:

Mat faceROI = new Mat(webcam_image,rect);
Highgui.imwrite("Face_frameNumber_faceInImageNumber.jpeg", faceROI);

另外,请考虑移至Opencv 3.1 /最新版本。您将受益于新功能,例如优化和在过去一年中做出的许多算法。

OPENCV 3以上

Highgui现在被VideoIO和ImgCodecs所破坏。同样,类似于Core.rectangle的函数已移至ImgProc。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在opencv java中裁剪检测到的面部图像

来自分类Dev

如何使用OpenCV Java压缩图像并将其存储到特定文件夹

来自分类Dev

如何将从(对象检测)裁剪的检测到的面部保存到其特定创建的文件夹中?

来自分类Dev

如何读取位于项目文件夹Java中的文件

来自分类Dev

如何在Java中删除包含其他文件夹的文件夹?

来自分类Dev

如何在Java中打开文件夹/目录

来自分类Dev

如何EXCUTE的java.class任何文件夹中?

来自分类Dev

如何在java中创建内存文件夹

来自分类Dev

如何修复 Java Build Path 中的 SRC 文件夹?

来自分类Dev

Java如何在jar环境而不是IDE中读取文件夹并列出该文件夹中的文件

来自分类Dev

如何在Java中获取自动生成的文件夹路径以解析文件夹中的文件

来自分类Dev

使用Java在Zip文件中重新创建文件夹结构-空文件夹

来自分类Dev

如何从文件夹中删除文件

来自分类Dev

如何删除文件夹中的文件

来自分类Dev

如何在Java中的zip文件中访问文件和文件夹列表?

来自分类Dev

在文件夹中裁剪图像-Matlab

来自分类Dev

如何使用Java脚本打印文件夹中的所有txt文件

来自分类Dev

无法使用Java删除文件夹

来自分类Dev

src 文件夹中的 Java 文件在 github 存储库中丢失

来自分类Dev

Java:在JFileChooser中,双击文件/文件夹时如何停止显示绝对文件路径?

来自分类Dev

如何在Java中的项目文件夹中创建文件?

来自分类Dev

如何读取位于工作区外部文件夹中的java类中的属性文件?

来自分类Dev

如何在Java中获取文件夹中的所有文件

来自分类Dev

使用Java的JSON API在Google云端存储中插入对象(作为文件夹)

来自分类Dev

文件夹与github中的存储库

来自分类Dev

Laravel中的存储文件夹

来自分类Dev

如何从Java程序专注于文件夹

来自分类Dev

如何使用scandir列出文件夹和子文件夹中的所有文件,并将其显示为select中的选项?

来自分类Dev

文件夹中的Java列表文件,避免使用.DS_Store

Related 相关文章

  1. 1

    如何在opencv java中裁剪检测到的面部图像

  2. 2

    如何使用OpenCV Java压缩图像并将其存储到特定文件夹

  3. 3

    如何将从(对象检测)裁剪的检测到的面部保存到其特定创建的文件夹中?

  4. 4

    如何读取位于项目文件夹Java中的文件

  5. 5

    如何在Java中删除包含其他文件夹的文件夹?

  6. 6

    如何在Java中打开文件夹/目录

  7. 7

    如何EXCUTE的java.class任何文件夹中?

  8. 8

    如何在java中创建内存文件夹

  9. 9

    如何修复 Java Build Path 中的 SRC 文件夹?

  10. 10

    Java如何在jar环境而不是IDE中读取文件夹并列出该文件夹中的文件

  11. 11

    如何在Java中获取自动生成的文件夹路径以解析文件夹中的文件

  12. 12

    使用Java在Zip文件中重新创建文件夹结构-空文件夹

  13. 13

    如何从文件夹中删除文件

  14. 14

    如何删除文件夹中的文件

  15. 15

    如何在Java中的zip文件中访问文件和文件夹列表?

  16. 16

    在文件夹中裁剪图像-Matlab

  17. 17

    如何使用Java脚本打印文件夹中的所有txt文件

  18. 18

    无法使用Java删除文件夹

  19. 19

    src 文件夹中的 Java 文件在 github 存储库中丢失

  20. 20

    Java:在JFileChooser中,双击文件/文件夹时如何停止显示绝对文件路径?

  21. 21

    如何在Java中的项目文件夹中创建文件?

  22. 22

    如何读取位于工作区外部文件夹中的java类中的属性文件?

  23. 23

    如何在Java中获取文件夹中的所有文件

  24. 24

    使用Java的JSON API在Google云端存储中插入对象(作为文件夹)

  25. 25

    文件夹与github中的存储库

  26. 26

    Laravel中的存储文件夹

  27. 27

    如何从Java程序专注于文件夹

  28. 28

    如何使用scandir列出文件夹和子文件夹中的所有文件,并将其显示为select中的选项?

  29. 29

    文件夹中的Java列表文件,避免使用.DS_Store

热门标签

归档