Swing Java CV 1.0网络摄像头视频捕获:无法将帧转换为IplImage
我无法使用JavaCV/OpenCV/FFMPEG录制网络摄像头视频(即捕获和保存.avi或.mp4文件),我做错了什么 使用的版本(全部64位) Win 7、NetBeans8.0.2、jdk1.7.0_10、JavaCV 1.0、OpenCV 3.0.0、ffmpeg-2.1.1-win64-shared。 我的系统变量设置为 C:\Program Files\Java\jdk1.7.0_10;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\ProgramFiles(x86)\Intel\OpenCLSDK\2.0\bin\x86;C:\ProgramFiles(x86)\Intel\OpenCLSDK\2.0\bin\x64;C:\ProgramFiles(x86)\MySQL\MySQL Fabric 1.5.4和MySQL Utilities 1.5.4 1.5\;C:\ProgramFiles(x86)\MySQL\MySQL Fabric 1.5.4和MySQL Utilities 1.5.4 1.5\PHP的条令扩展\C:\opencv\build\x64\vc11\bin;C:\ffmpeg\bin 下载并设置路径变量后,我将jar文件添加到Netbeans项目中 C:\opencv\build\java\opencv-300.jar C:\javacv-1.0-bin\javacv-bin\videoinput.jar C:\javacv-1.0-bin\javacv-bin\videoinput-windows-x86\u 64.jar C:\javacv-1.0-bin\javacv-bin\videoinput-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\opencv.jar C:\javacv-1.0-bin\javacv-bin\opencv-windows-x86\u 64.jar C:\javacv-1.0-bin\javacv-bin\opencv-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\libfreenect.jar C:\javacv-1.0-bin\javacv-bin\libfreenect-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\libfreenect-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\libdc1394.jar C:\javacv-1.0-bin\javacv-bin\junit.jar C:\javacv-1.0-bin\javacv-bin\javacv.jar C:\javacv-1.0-bin\javacv-bin\javacpp.jar C:\javacv-1.0-bin\javacv-bin\hamcrest-core.jar C:\javacv-1.0-bin\javacv-bin\flycapture.jar C:\javacv-1.0-bin\javacv-bin\flycapture-windows-x86\u 64.jar C:\javacv-1.0-bin\javacv-bin\flycapture-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\flandmark.jar C:\javacv-1.0-bin\javacv-bin\flandmark-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\flandmark-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg-windows-x86\u 64.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus-windows-x86.jar 问题1:Swing Java CV 1.0网络摄像头视频捕获:无法将帧转换为IplImage,swing,ffmpeg,webcam,javacv,Swing,Ffmpeg,Webcam,Javacv,我无法使用JavaCV/OpenCV/FFMPEG录制网络摄像头视频(即捕获和保存.avi或.mp4文件),我做错了什么 使用的版本(全部64位) Win 7、NetBeans8.0.2、jdk1.7.0_10、JavaCV 1.0、OpenCV 3.0.0、ffmpeg-2.1.1-win64-shared。 我的系统变量设置为 C:\Program Files\Java\jdk1.7.0_10;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\S
捕获网络摄像头视频的第一个程序(显示并保存到output.avi文件)如下所示 它显示网络摄像头并创建output.avi。但在媒体播放器中打开文件output.avi时终止程序后,它不会显示任何内容:) 它不起作用
import java.io.File;
import java.net.URL;
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.indexer.*;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_calib3d.*;
import static org.bytedeco.javacpp.opencv_objdetect.*;
public class JCVdemo3 {
public static void main(String[] args) throws Exception {
// Preload the opencv_objdetect module to work around a known bug.
Loader.load(opencv_objdetect.class);
// The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio),
// DC1394FrameGrabber, FlyCaptureFrameGrabber, OpenKinectFrameGrabber,
// PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber.
FrameGrabber grabber = FrameGrabber.createDefault(0);
grabber.start();
// CanvasFrame, FrameGrabber, and FrameRecorder use Frame objects to communicate image data.
// We need a FrameConverter to interface with other APIs (Android, Java 2D, or OpenCV).
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
IplImage grabbedImage = converter.convert(grabber.grab());
int width = grabbedImage.width();
int height = grabbedImage.height();
FrameRecorder recorder = FrameRecorder.createDefault("output.avi", width, height);
recorder.start();
CanvasFrame frame = new CanvasFrame("Some Title");
while (frame.isVisible() && (grabbedImage = converter.convert(grabber.grab())) != null) {
// cvWarpPerspective(grabbedImage, rotatedImage, randomR);
Frame rotatedFrame = converter.convert(grabbedImage);
//opencv_core.IplImage grabbedImage = grabber.grab();
frame.showImage(rotatedFrame);
recorder.record(rotatedFrame);
}
frame.dispose();
recorder.stop();
grabber.stop();
}
}
问题2:当我运行以下代码时
opencv_core.IplImage grabbedImage = grabber.grab();
不兼容类型:无法将框架转换为IplImage出现消息
import java.io.File;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.indexer.*;
import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_calib3d.*;
import static org.bytedeco.javacpp.opencv_objdetect.*;
public class Demo {
public static void main(String[] args) {
try {
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start();
opencv_core.IplImage grabbedImage = grabber.grab();
CanvasFrame canvasFrame = new CanvasFrame("Video with JavaCV");
canvasFrame.setCanvasSize(grabbedImage.width(), grabbedImage.height());
grabber.setFrameRate(grabber.getFrameRate());
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("mytestvideo.mp4", grabber.getImageWidth(), grabber.getImageHeight());
recorder.setFormat("mp4");
recorder.setFrameRate(30);
recorder.setVideoBitrate(10 * 1024 * 1024);
recorder.start();
while (canvasFrame.isVisible() && (grabbedImage = grabber.grab()) != null) {
canvasFrame.showImage(grabbedImage);
recorder.record(grabbedImage);
}
recorder.stop();
grabber.stop();
canvasFrame.dispose();
} catch (FrameGrabber.Exception ex) {
Logger.getLogger(JCVdemo.class.getName()).log(Level.SEVERE, null, ex);
} catch (FrameRecorder.Exception ex) {
Logger.getLogger(JCVdemo.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
问题是:我做错了什么
我无法录制任何类型的视频;无论我使用哪个版本的JavaCV/OPenCv
请告诉我从网络摄像头录制视频的工作示例,以及JavaCV/OpenCV/FFmpeg兼容版本的工作示例。使用:
OpenCVFrameConverter
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
img = converter.convert(grabber.grab());
发件人: