保存捕获的图像时出现 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 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIImageWriteToSavedPhotosAlbum 保存图像时出现无法识别的选择器错误
使用 OpenCV VideoWriter 保存灰度图像时出现 Gstreamer 错误