Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将openCV库与Java结合使用在Linux上效果良好,但在Windows上效果不佳_Java_Opencv_Ffmpeg_Javacv - Fatal编程技术网

将openCV库与Java结合使用在Linux上效果良好,但在Windows上效果不佳

将openCV库与Java结合使用在Linux上效果良好,但在Windows上效果不佳,java,opencv,ffmpeg,javacv,Java,Opencv,Ffmpeg,Javacv,我有一种方法,从视频文件中以绝对间隔(25%、50%、75%和100%)截图,并将每个截图保存到单独的.png文件中。我使用openCV和JavaCV包装库来实现这一点。感兴趣的类别/方法是: package de.stal.videoreporter; 导入org.bytedeco.javacpp.opencv_核心; 导入静态org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage; 导入org.bytedeco.javacv.FFmpegFrame

我有一种方法,从视频文件中以绝对间隔(25%、50%、75%和100%)截图,并将每个截图保存到单独的.png文件中。我使用openCV和JavaCV包装库来实现这一点。感兴趣的类别/方法是:

package de.stal.videoreporter;
导入org.bytedeco.javacpp.opencv_核心;
导入静态org.bytedeco.javacpp.opencv_imgcodecs.cvSaveImage;
导入org.bytedeco.javacv.FFmpegFrameGrabber;
导入org.bytedeco.javacv.Frame;
导入org.bytedeco.javacv.FrameGrabber;
导入org.bytedeco.javacv.OpenCVFrameConverter;
类视频缩略图器{
public void createThumbnails(字符串videoname)引发FrameGrabber。异常{
FFmpegFrameGrabber g=新的FFmpegFrameGrabber(“视频/”+视频名称);
g、 start();
OpenCVFrameConverter.ToipImage ConverterToipImage=新的OpenCVFrameConverter.ToipImage();
int length=g.getLengthInFrames();
int五十=长度/2;
int二十五=50/2;
int seventyfive=五十+二十五;
int一百=长度-1;
//每帧视频
对于(int j=0;j
这在以下环境中运行良好:Ubuntu15.10x64、JavaV.1.7.0_101和带有Maven的NetBeans8.0.2。因此,我将项目导出到一个可运行的jar文件(包括所有依赖项),并尝试通过以下方式在Windows 10 x64上启动它:

java -jar VideoReporter-1.0-SNAPSHOT-jar-with-dependencies.jar
在Windows上,执行.jar文件时将引发异常:

Error putting member offsets for class org/bytedeco/javacpp/avutil$Pool_free_Pointer.
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.bytedeco.javacpp.Loader.load(Loader.java:472)
    at org.bytedeco.javacpp.Loader.load(Loader.java:417)
    at org.bytedeco.javacpp.avformat$AVFormatContext.<clinit>(avformat.java:2719)
    at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:391)
    at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:385)
    at de.stal.videoreporter.VideoThumbnailer.createThumbnails(VideoThumbnailer.java:15)
    at de.stal.videoreporter.MetaReader.slurpMetadata(MetaReader.java:67)
    at de.stal.videoreporter.VideoReporter.main(VideoReporter.java:19)
为类org/bytedeco/javacpp/avutil$Pool\u free\u指针放置成员偏移量时出错。
线程“main”java.lang.NoClassDefFoundError中出现异常:无法初始化类org.bytedeco.javacpp.avutil
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于org.bytedeco.javacpp.Loader.load(Loader.java:472)
位于org.bytedeco.javacpp.Loader.load(Loader.java:417)
位于org.bytedeco.javacpp.avformat$AVFormatContext(avformat.java:2719)
位于org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:391)
位于org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:385)
在de.stal.videoreporter.VideoThumbnailer.createThumbnails(VideoThumbnailer.java:15)
位于de.stal.videoreporter.MetaReader.slurpMetadata(MetaReader.java:67)
位于de.stal.videoreporter.videoreporter.main(videoreporter.java:19)

我的pom.xml是:


4.0.0
德斯塔尔
录像记者
1.0-快照
罐子
UTF-8
1.7
1.7
maven汇编插件
电视记者
带有依赖项的jar
组装
包裹
单一的
org.apache.commons
公共空间
1.1
org.bytedeco
javacpp
1.2.1
org.bytedeco
爪哇
1.2
com.fasterxml.jackson.dataformat
jackson数据格式csv
2.8.0.rc2
javassist
javassist
3.12.1.GA
公地收藏
公地收藏
3.2.1
com.opencsv
opencsv
3.3

Windows上可能有什么问题?在我看来,访问openCV/FFMPEG类应该没有问题,因为它们都包含在.jar文件中?这是类路径的问题吗

谢谢你,彼得