保存捕获的图像时出现 JavaCV 错误

Posted

技术标签:

【中文标题】保存捕获的图像时出现 JavaCV 错误【英文标题】:JavaCV error when saving a captured image 【发布时间】:2017-10-21 10:02:13 【问题描述】:

单击“捕获”按钮时出现此错误。

OpenCV 错误:未指定的错误(找不到 cv::imwrite_,文件中的指定扩展名) C:\build\2_4_winpack-bindings-win64-vc14-static\opencv\modules\highgui\src\loadsave.cpp, 第 275 行 线程“AWT-EventQueue-0”中的异常 CvException [org.opencv.core.CvException: cv::Exception: C:\build\2_4_winpack-bindings-win64-vc14-static\opencv\modules\highgui\src\loadsave.cpp:275: 错误:(-2) 找不到指定扩展名的写入器 函数 cv::imwrite_ ]

这是我的捕获按钮的代码。

if (evt.getSource() == btnCapture) 
    webSource = new VideoCapture(0);
    myThread = new DaemonThread();
    Thread t = new Thread(myThread);
            t.setDaemon(true);
            myThread.runnable = true;
            t.start();

        

myThread.runnable = false;
            webSource.release();



                    JFileChooser jFileChooser1 = new JFileChooser("./images");
                 int returnVal = jFileChooser1.showSaveDialog(this);

                if(returnVal == JFileChooser.APPROVE_OPTION)
                     File  file = jFileChooser1.getSelectedFile().getAbsoluteFile();
                     String path = jFileChooser1.getSelectedFile().getAbsolutePath();
                      f = new File(file.toURI());
                     Highgui.imwrite(file.getPath(), frame);
                

                FileInputStream fis;
    try 
        fis = new FileInputStream(f);
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                for(int readNum; (readNum = fis.read(buf)) != -1;)
                    bos.write(buf, 0, readNum);
     
 byte[] convict_image = bos.toByteArray();
    catch (FileNotFoundException ex) 
        Logger.getLogger(cam.class.getName()).log(Level.SEVERE, null, ex);
     catch (IOException ex) 
        Logger.getLogger(cam.class.getName()).log(Level.SEVERE, null, ex);
    

【问题讨论】:

您的代码中的逻辑是什么,首先您更新了 VideoCapture,然后您立即发布了它?还有在Highgui.imwrite(file.getPath(), frame); 行中,您是在哪里以及如何捕获帧的?所以问题...... //btnPause 动作事件 (myThread.runnable = false; btnOpen.setEnabled(false); btnCapture.setEnabled(true); webSource.release();) //btnOpen 动作事件 webSource = new VideoCapture(0); myThread = new DaemonThread();线程 t = 新线程(myThread); t.setDaemon(true); myThread.runnable = true; t.start(); btnCapture.setEnabled(false); btnOpen.setEnabled(true); webSource.retrieve(frame); Highgui.imencode("image.bmp", frame, mem);图像 im = ImageIO.read(new ByteArrayInputStream(mem.toArray())); BufferedImage buff = (BufferedImage) im;图形 g = jPanelPicture.getGraphics(); if (g.drawImage(buff, 0, 0, getWidth(), getHeight() - 150, 0, 0, buff.getWidth(), buff.getHeight(), null)) 【参考方案1】:

当您使用imwrite 编写图像时,您必须指定扩展名,只需执行以下操作:

Highgui.imwrite(file.getPath()+"\\image.jpg", frame);

这里的 .jpg 是扩展名。

【讨论】:

这个错误发生在我运行代码时。 java.io.FileNotFoundException: C:\Users\Kurt\Desktop\asd (系统找不到指定的文件) 嗨!这个错误不属于OpenCV,所以你可以检查给定的路径OK。

以上是关于保存捕获的图像时出现 JavaCV 错误的主要内容,如果未能解决你的问题,请参考以下文章

通过PHP保存png时出现深色图像

尝试保存图像时出现 Android 运行时错误

使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误

使用 OpenCV VideoWriter 保存灰度图像时出现 Gstreamer 错误

尝试在应用程序错误 NSInvalidArgumentException 中保存/加载图像

与completionBlock异步下载和保存文件时出现错误的CollectionView单元格图像