Java OpenCV保存视频文件

时间:2020-06-13 04:49:44

标签: java opencv

我想使用java opencv从我的摄像头中保存一些帧(本例中为600)的文件(avi),但我不知道该怎么做,以下代码为我指定了avi文件,但大小为0,whatsover内没有任何帧,在目录中我也有JPEG格式的那600帧。

为此必须使用Java,而不要使用python。

 Mat frame = new Mat();
    VideoWriter writer = new VideoWriter("c:/opencv/vid.avi", VideoWriter.fourcc('X','2','6','4'), 30 ,frame.size(), true);

    videoCapture = new VideoCapture();
    videoCapture.open(0);

    videoCapture.set(Videoio.CAP_PROP_FRAME_WIDTH, 1280);
    videoCapture.set(Videoio.CAP_PROP_FRAME_HEIGHT, 720);

    while (true){
        videoCapture.read(frame);
        if (!frame.empty())
            break;
    }

    int frameNo = 0;
    while (frameNo < 600){

        videoCapture.read(frame);
        writer.write(frame);
        Imgcodecs imageCodecs = new Imgcodecs();
        String file = "c:/opencv/i" + frameNo + ".jpg";
        Imgcodecs.imwrite(file,frame);
        frameNo++;
    }

    videoCapture.release(); // release device

1 个答案:

答案 0 :(得分:1)

您没有提到您使用的是哪个openCV版本,我使用的是OpenCV-3.4.2

AVI容器使用DIVX编解码器参考:https://wiki.videolan.org/DivX/

我修改了您的代码:

Mat frame = new Mat();
VideoWriter writer = new VideoWriter("c:/opencv/vid.avi", VideoWriter.fourcc('D', 'I', 'V', 'X'), 30, new Size(videoCapture.get(Videoio.CAP_PROP_FRAME_WIDTH), videoCapture.get(Videoio.CAP_PROP_FRAME_HEIGHT)));
while(runnable)
{
    if(videoCapture.grab())
    {
        try
        {
            //Decodes and returns the grabbed video frame.
            videoCapture.retrieve(frame);
            //encode to .jpg the frame to a MatOfByte
            Imgcodecs.imencode(".jpg", frame, mem);
            //read into an Image
            Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
            //Draw image to a Jpanel
            BufferedImage buff = (BufferedImage) im;
            Graphics g = jPanel1.getGraphics();
            g.drawImage(buff, 0, 0, getWidth(), getHeight(), 0, 0, buff.getWidth(), buff.getHeight(), null);
            //record the frame
            writer.write(frame);
        }
        catch(Exception ex)
        {
            System.out.println("Error");
            ex.printStackTrace();
        }
    }
}
videoCapture.release(); // release device
相关问题