【发布时间】:2015-08-06 10:18:06
【问题描述】:
我正在尝试使用 OpenCV 从 gif 中获取帧。我找到了Convert each animated GIF frame to a separate BufferedImage 并使用了第二个建议。我稍作修改以返回一个 Mats 数组而不是 BufferedImages。
我尝试了两种方法从 gif 中获取 bufferedImages。每个都提出了不同的问题。
-
根据上一个帖子的建议
BufferedImage fImage=ir.read(i);程序调用“ArrayIndexOutOfBoundsException: 4096”
-
使用上一个线程的原始代码。
BufferedImage fImage=ir.getRawImageType(i).createBufferedImage(ir.getWidth(i),ir.getHeight(i));每一帧都是单调的颜色(虽然不是全黑),从 BufferedImage 派生的垫子是空的。
System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); ArrayList<Mat> frames = new ArrayList<Mat>(); ImageReader ir = new GIFImageReader(new GIFImageReaderSpi()); ir.setInput(ImageIO.createImageInputStream(new File("ronPaulTestImage.gif"))); for(int i = 0; i < ir.getNumImages(true); i++){ BufferedImage fImage=ir.read(i); //BufferedImage fImage=ir.getRawImageType(i).createBufferedImage(ir.getWidth(i), ir.getHeight(i)); fImage = toBufferedImageOfType(fImage, BufferedImage.TYPE_3BYTE_BGR); //byte[] pixels = ((DataBufferByte) r.getRaster().getDataBuffer()).getData(); Mat m=new Mat(); //m.put(0,0,pixels); m.put(0, 0,((DataBufferByte) fImage.getRaster().getDataBuffer()).getData()); if(i==40){ //a test, writes the mat and the image at the specified frame to files, exits ImageIO.write(fImage,"jpg",new File("TestError.jpg")); Imgcodecs.imwrite("TestErrorMat.jpg",m); System.exit(0); }
这里是gif I used
【问题讨论】:
标签: java opencv image-processing