- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在使用 JavaCV 并尝试从 mp4 文件中捕获帧作为图像。当我尝试保存图像并且无法在任何地方找到解决方案时,我不断收到 EXCEPTION_ACCESS_VIOLATION。 OpenCV、JavaCV 和 Java 都是相同的位数 (64)。我还安装了 64 位 Visual C++。这是我正在使用的代码,不知道是什么原因造成的,或者替代解决方案是什么。提前感谢您的帮助。
public class VideoTest {
public static void main(final String args[]) {
VideoTest vt = new VideoTest();
IplImage[] images = vt.extractVideoFrames("video.mp4");
int i = 1;
//Save images
for(IplImage image : images) {
/* Exception_ACCESS_VIOLATION occurs here */
cvSaveImage(Integer.toString(i) + ".jpg", image);
i++;
}
}
/* Extract at least 30 frames from the video at even intervals */
private IplImage[] extractVideoFrames(String videoName) {
FrameGrabber grabber = new FFmpegFrameGrabber(videoName);
try {
grabber.start();
} catch (com.googlecode.javacv.FrameGrabber.Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
double frameLength = grabber.getLengthInFrames();
int increment = (int) Math.ceil(frameLength / 30);
if (frameLength < 30) {
System.err.println("Not enough frames");
}
IplImage[] faceImgArr = new IplImage[30];
/* Ensure we don't go past end of video and get at least 30 frames */
for (int i = 0, j = 0; i < frameLength && j <= 30; i += increment, j++) {
try {
if ((grabber.getFrameNumber() % increment) == 0) {
faceImgArr[j] = grabber.grab();
} else {
grabber.grabFrame();
}
} catch (Exception e) {
System.err.println("Error grabbing frame");
}
}
return faceImgArr;
}
}
Error Message:
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000066de1630, pid=1328, tid=7016
#
# JRE version: 6.0_32-b05
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.7-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [opencv_ffmpeg242_64.dll+0x5a1630]
#
# An error report file with more information is saved as:
# C:\Users\name\workspace\Video\hs_err_pid1328.log
#
Snippet from log:
Stack: [0x0000000002900000,0x0000000002a00000], sp=0x00000000029fec30, free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [opencv_ffmpeg242_64.dll+0x5a1630] cvWriteFrame_FFMPEG+0x59e2b0
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.googlecode.javacv.cpp.opencv_highgui.cvCreateFileCapture(Ljava/lang/String;)Lcom/googlecode/javacv/cpp/opencv_highgui$CvCapture;+0
j com.googlecode.javacv.OpenCVFrameGrabber.start()V+22
j main.recognition.VideoTest.extractVideoFrames(Ljava/lang/String;)[Lcom/googlecode/javacv/cpp/opencv_core$IplImage;+10
j main.recognition.VideoTest.main([Ljava/lang/String;)V+11
v ~StubRoutines::call_stub
最佳答案
通常,由于变量超出范围,Javacv 代码中会发生访问冲突(JNI 行为与正常情况有点不同。请参阅这篇文章我如何解决我的访问冲突 http://tech.thecoolblogs.com/2012/10/exceptionaccessviolation-while-using.html)
要解决您的问题,请首先在一个范围内尝试整个代码。我的意思是在一个方法中并在一个 try..catch block 中。如果可行,我们可以假设此问题显然与超出范围的某些变量有关。然后尝试移动 IplImage 创建并查看它是否消失。
如果它仍然不起作用(在合并到相同的方法和范围之后),请检查临时文件夹(C:\users\ur id\AppData\Local\Temp\javacpp** 文件夹以查看是否有 dll 文件被复制过来
关于保存图像时JavaCV EXCEPTION_ACCESS_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814486/
我在使用 JavaFX 桌面应用程序时遇到问题,特别是在 3D 渲染功能方面。每次我尝试构建和启动 JavaFX 应用程序时,JVM 都会崩溃,并且会收到类似于以下错误的错误: # # A fatal
所以我正在使用 JavaCV 并尝试从 mp4 文件中捕获帧作为图像。当我尝试保存图像并且无法在任何地方找到解决方案时,我不断收到 EXCEPTION_ACCESS_VIOLATION。 OpenCV
我正在开发一个eclipse插件,并使用eclipse应用程序运行/调试配置来运行它以进行测试。自从我更改为JDK1.8以来,嵌套的Eclipse应用程序崩溃了。如果尝试使用ctrl + click从
当我尝试从 Openbravo POS 打印票据时出现此 hs_err_pid: # # A fatal error has been detected by the Java Runtime Env
当我使用 eclipse 运行我的项目的 java bean 时,我得到了这个崩溃报告。我完全不知道它是什么以及如何调试。谁能告诉我调试这个的可能方法? # # An unexpected error
我用JNA在libpotrace.dll中调用了这个函数,这个函数是: potrace_state_t *potrace_trace(const potrace_param_t *param, con
我正在创建一个小实用程序,用于使用 jpcap 将各种数据有效负载写入 pcap 转储文件。对于每个有效负载,我都按照“通过网络接口(interface)发送数据包”示例中的描述创建一个数据包并发送它
这是我尝试安装MATLAB时Java运行时环境返回的完整错误消息: # A fatal error has been detected by the Java Runtime Environme
我是 JNI 的新手,正在尝试使用 Windows 7 和 cygwin 的 gcc 编译器创建一个简单的 Hello World 程序。这是各种组件: 你好.java: public class H
我正在通过 JNA 使用 C++ DLL。我想在Java中调用下面的方法,将我想读取的信息写入szVisor。 long FAR PASCAL DLL_GetLocalPortTS(char* szE
我刚刚下载了 Blender 2.75a,它所做的只是打开一个控制台窗口,显示“错误:EXCEPTION_ACCESS_VIOLATION” 控制台窗口不会关闭,也不会随任务管理器一起退出,当我尝试结
通过 LWJGL 使用 opencl 时,我收到以下错误消息: # # A fatal error has been detected by the Java Runtime Environment:
我们在我们自己的测试工具(基于 Java 的)中运行我们的测试集......随机测试失败......我们得到以下 JVM 失败错误......请帮助...... A fatal error has b
我的 Java UI 意外终止并转储了一个 hs_err_pid 文件。该文件显示“崩溃发生在本地代码的 Java 虚拟机之外”。 JNA 是我们使用的唯一本地代码。有谁知道任何可能导致此问题的 JN
我正在尝试实现一种使用 OpenGL 和 Java 中的 vertexBufferObjects 绘制一堆立方体的方法,但是在调用 glDrawArrays 命令时遇到了问题。 本质上,该程序所做的是
我可能在 Java 中遇到了一个奇怪的错误。当我运行以下代码时,出现“EXCEPTION_ACCESS_VIOLATION”异常。 我知道代码没有意义(就逻辑而言),因为它是我最初编写的代码的子集。如
我目前正在尝试按照名为“学习 Libgdx 游戏开发”的书中的教程来学习 libGdx,并发现了一个奇怪的错误。 有一个名为 backToMenu 的函数: private void backToMe
今天在工作中,我的 eclipse 开始反复崩溃。打开它并开始编辑文件就足以在几分钟后崩溃。我重新安装了所有东西:Eclipse、Workspace、Java,但没有任何帮助。请尝试找出问题的根源,因
我一直在尝试让我的公司软件 (HP Operations Orchestra) 在重新安装后运行很多次,但我无法打开它。相反,它会在其目录中生成一个错误日志文件,其中包含以下内容: # # A fat
今天,我决定继续开发我为计算机科学类(class)创建的程序。运行它后,我在控制台中看到了这个: # # A fatal error has been detected by the Java Run
我是一名优秀的程序员,十分优秀!