Java 查找轮廓函数的异常\u访问\u冲突错误
我使用cvFindContours查找边缘检测帧的轮廓。首先,我使用cvCanny从实际帧中获取边缘帧。然后我试图找到轮廓。这是我的代码结构 //使用cvcanny获取当前帧和下一帧Java 查找轮廓函数的异常\u访问\u冲突错误,java,video-processing,javacv,Java,Video Processing,Javacv,我使用cvFindContours查找边缘检测帧的轮廓。首先,我使用cvCanny从实际帧中获取边缘帧。然后我试图找到轮廓。这是我的代码结构 //使用cvcanny获取当前帧和下一帧 CvMemStorage curstorage=CvMemStorage.create(); CvMemStorage nextstorage=CvMemStorage.create(); CvSeq cursquares = new CvContour(); CvSeq nextsquares = new Cv
CvMemStorage curstorage=CvMemStorage.create();
CvMemStorage nextstorage=CvMemStorage.create();
CvSeq cursquares = new CvContour();
CvSeq nextsquares = new CvContour();
cvFindContours(cur, curstorage, cursquares, Loader.sizeof(CvContour.class),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
cvFindContours(next, nextstorage, nextsquares, Loader.sizeof(CvContour.class),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
当我运行代码时,我得到了访问冲突异常。以下是异常详细信息
Java运行时环境检测到一个致命错误:
pc=0x0000000062E3320,pid=9184,tid=6236处的异常访问(0xc0000005)
JRE版本:7.0_17-b02
Java虚拟机:Java热点(TM)64位服务器虚拟机(23.7-b01混合模式windows-amd64压缩oops)
有问题的框架:
C[msvcr100.dll+0x3c320]内存集+0x80
无法写入核心转储。默认情况下,在客户端版本的Windows上不启用小型转储
由于我刚刚开始使用javacv,所以我不确定哪里出了问题。任何关于这方面的建议都会很有帮助。谢谢。在调用
cvFindContours
之后,您可能不会引用CvMemStorage
实例,而只引用CvSeq
。存储可能被评估为未引用,因此被GCed,而您仍然需要使用CvSeq,这取决于存储。这将在GC发生后第一次使用CvSeq时导致异常访问冲突
尝试添加:
curstorage.release();
nextstorage.release();
在您退出使用CvSeq之后。它有两个优点:它主动释放本机内存而不等待GC,并且防止GC过早释放存储。请看我的问题: