2013-08-07 2 views
0

동일한 코드 실행시 버전 2.3.5 및 4.0.4의 두 버전 충돌로 Android에서 작업하고 있습니다. 비디오에서 프레임을 가져 와서 저장 한 다음 HSV로 변환하려고했습니다. openCV cvSaveImage 및 cvCvtColor가 android에서 충돌합니다.

이 내 코드와 내가 오류입니다 (나는 OpenCV의 웹 사이트 here에서이 같은 질문을 게시). 여기

public void process(){ 
     IplImage orgImg = this.getFrame(2); 
       cvSaveImage(Environment.getExternalStorageDirectory().toString() + "/openCV/orgimg.jpg", orgImg); 
       IplImage hsv = hsv(orgImg); 
    } 

    private IplImage getFrame(int id){ 
      File testfile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + videoFile); 

      if(testfile.canRead()){ 

       FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(testfile); 
       try { 
        grabber.start(); 
        grabber.setFrameNumber(id); 
        final int height=grabber.getImageHeight(); 
        final int width=grabber.getImageWidth(); 
        IplImage frame = IplImage.create(width, height, 8, 4); 
        frame = grabber.grab(); 
        //grabber.stop(); 
        return frame; 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 

private IplImage hsv(IplImage orgImg) { 
     // 8-bit, 3- color =(RGB) 
     IplImage imgHSV = cvCreateImage(cvGetSize(orgImg), 8, 3); 
     Log.e(TAG,"hsvThreshold - Image size" + cvGetSize(orgImg)); 
     cvCvtColor(orgImg, imgHSV, CV_BGR2HSV); 

     return imgHSV; 
    } 

는 cvSaveImage 또는 cvCvtColor이 4.0.4

08-07 12:26:25.974: I/dalvikvm(6719): "main" prio=5 tid=1 NATIVE 
08-07 12:26:25.974: I/dalvikvm(6719): | group="main" sCount=0 dsCount=0 obj=0x40bf1460 self=0x101aca8 
08-07 12:26:25.974: I/dalvikvm(6719): | sysTid=6719 nice=0 sched=0/0 cgrp=default handle=1074673032 
08-07 12:26:25.974: I/dalvikvm(6719): | schedstat=(0 0 0) utm=710 stm=34 core=0 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.Runtime.loadLibrary(Runtime.java:368) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.System.loadLibrary(System.java:535) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacpp.Loader.load(Loader.java:489) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacpp.Loader.load(Loader.java:431) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.Class.classForName(Native Method) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.Class.forName(Class.java:217) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacpp.Loader.load(Loader.java:453) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) 
08-07 12:26:25.974: I/dalvikvm(6719): at ch.golfer.TrackSpot.process(TrackSpot.java:-1) 
08-07 12:26:25.974: I/dalvikvm(6719): at ch.golfer.FullscreenActivity$7.onClick(FullscreenActivity.java:196) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.view.View.performClick(View.java:3627) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.view.View$PerformClick.run(View.java:14305) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.os.Handler.handleCallback(Handler.java:605) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.os.Looper.loop(Looper.java:137) 
08-07 12:26:25.974: I/dalvikvm(6719): at android.app.ActivityThread.main(ActivityThread.java:4511) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 12:26:25.974: I/dalvikvm(6719): at java.lang.reflect.Method.invoke(Method.java:511) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976) 
08-07 12:26:25.974: I/dalvikvm(6719): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743) 
08-07 12:26:25.974: I/dalvikvm(6719): at dalvik.system.NativeStart.main(Native Method) 
08-07 12:26:25.974: E/dalvikvm(6719): VM aborting 
08-07 12:26:25.974: A/libc(6719): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1) 

를 실행하는 장치에서 실행될 때 내가 얻을 로그 캣입니다 그리고 이것은 2.3.5 장치의 로그 캣입니다 :

08-07 12:32:05.503: E/javacpp(995): Error loading class com/googlecode/javacpp/Pointer. 
08-07 12:32:09.620: I/dalvikvm(995): threadid=4: reacting to signal 3 
08-07 12:32:10.620: W/dalvikvm(995): threadid=4: spin on suspend #1 threadid=1 (pcf=0) 
08-07 12:32:11.370: W/dalvikvm(995): threadid=4: spin on suspend #2 threadid=1 (pcf=0) 
08-07 12:32:11.370: I/dalvikvm(995): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE 
08-07 12:32:11.370: I/dalvikvm(995): | group="system" sCount=0 dsCount=0 obj=0x4050e148 self=0x288d08 
08-07 12:32:11.370: I/dalvikvm(995): | sysTid=999 nice=0 sched=0/0 cgrp=default handle=2078152 
08-07 12:32:11.370: I/dalvikvm(995): at dalvik.system.NativeStart.run(Native Method) 
08-07 12:32:11.370: I/dalvikvm(995): "main" prio=5 tid=1 RUNNABLE 
08-07 12:32:11.370: I/dalvikvm(995): | group="main" sCount=1 dsCount=0 obj=0x4001f190 self=0xce60 
08-07 12:32:11.370: I/dalvikvm(995): | sysTid=995 nice=0 sched=0/0 cgrp=default handle=-1345006496 
08-07 12:32:11.456: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:11.472: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:11.476: I/dalvikvm(995): at java.lang.Runtime.loadLibrary(Runtime.java:432) 
08-07 12:32:11.488: I/dalvikvm(995): at java.lang.System.loadLibrary(System.java:554) 
08-07 12:32:11.507: I/dalvikvm(995): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) 
08-07 12:32:11.511: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:489) 
08-07 12:32:11.519: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:431) 
08-07 12:32:11.527: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) 
08-07 12:32:11.530: I/dalvikvm(995): at java.lang.Class.classForName(Native Method) 
08-07 12:32:11.534: I/dalvikvm(995): at java.lang.Class.forName(Class.java:234) 
08-07 12:32:11.542: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:453) 
08-07 12:32:11.550: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) 
08-07 12:32:11.554: I/dalvikvm(995): at ch.golfer.TrackSpot.process(TrackSpot.java:-1) 
08-07 12:32:11.562: I/dalvikvm(995): at ch.golfer.FullscreenActivity$7.onClick(FullscreenActivity.java:196) 
08-07 12:32:11.570: I/dalvikvm(995): at android.view.View.performClick(View.java:2538) 
08-07 12:32:11.581: I/dalvikvm(995): at android.view.View$PerformClick.run(View.java:9152) 
08-07 12:32:11.589: I/dalvikvm(995): at android.os.Handler.handleCallback(Handler.java:587) 
08-07 12:32:11.593: I/dalvikvm(995): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 12:32:11.605: I/dalvikvm(995): at android.os.Looper.loop(Looper.java:130) 
08-07 12:32:11.616: I/dalvikvm(995): at android.app.ActivityThread.main(ActivityThread.java:3688) 
08-07 12:32:11.620: I/dalvikvm(995): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 12:32:11.624: I/dalvikvm(995): at java.lang.reflect.Method.invoke(Method.java:507) 
08-07 12:32:11.632: I/dalvikvm(995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-07 12:32:11.640: I/dalvikvm(995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-07 12:32:11.648: I/dalvikvm(995): at dalvik.system.NativeStart.main(Native Method) 
08-07 12:32:12.405: W/dalvikvm(995): threadid=4: spin on suspend #3 threadid=1 (pcf=0) 
08-07 12:32:12.405: I/dalvikvm(995): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE 
08-07 12:32:12.405: I/dalvikvm(995): | group="system" sCount=0 dsCount=0 obj=0x4050e148 self=0x288d08 
08-07 12:32:12.405: I/dalvikvm(995): | sysTid=999 nice=0 sched=0/0 cgrp=default handle=2078152 
08-07 12:32:12.405: I/dalvikvm(995): at dalvik.system.NativeStart.run(Native Method) 
08-07 12:32:12.405: I/dalvikvm(995): "main" prio=5 tid=1 RUNNABLE 
08-07 12:32:12.405: I/dalvikvm(995): | group="main" sCount=1 dsCount=0 obj=0x4001f190 self=0xce60 
08-07 12:32:12.405: I/dalvikvm(995): | sysTid=995 nice=0 sched=0/0 cgrp=default handle=-1345006496 
08-07 12:32:12.460: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:12.472: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:12.480: I/dalvikvm(995): at java.lang.Runtime.loadLibrary(Runtime.java:432) 
08-07 12:32:12.484: I/dalvikvm(995): at java.lang.System.loadLibrary(System.java:554) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:489) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:431) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) 
08-07 12:32:12.488: I/dalvikvm(995): at java.lang.Class.classForName(Native Method) 
08-07 12:32:12.488: I/dalvikvm(995): at java.lang.Class.forName(Class.java:234) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:453) 
08-07 12:32:12.488: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) 
08-07 12:32:12.488: I/dalvikvm(995): at ch.golfer.TrackSpot.process(TrackSpot.java:-1) 
08-07 12:32:12.488: I/dalvikvm(995): at ch.golfer.FullscreenActivity$7.onClick(FullscreenActivity.java:196) 
08-07 12:32:12.488: I/dalvikvm(995): at android.view.View.performClick(View.java:2538) 
08-07 12:32:12.488: I/dalvikvm(995): at android.view.View$PerformClick.run(View.java:9152) 
08-07 12:32:12.488: I/dalvikvm(995): at android.os.Handler.handleCallback(Handler.java:587) 
08-07 12:32:12.488: I/dalvikvm(995): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 12:32:12.488: I/dalvikvm(995): at android.os.Looper.loop(Looper.java:130) 
08-07 12:32:12.488: I/dalvikvm(995): at android.app.ActivityThread.main(ActivityThread.java:3688) 
08-07 12:32:12.488: I/dalvikvm(995): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 12:32:12.488: I/dalvikvm(995): at java.lang.reflect.Method.invoke(Method.java:507) 
08-07 12:32:12.488: I/dalvikvm(995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-07 12:32:12.488: I/dalvikvm(995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-07 12:32:12.488: I/dalvikvm(995): at dalvik.system.NativeStart.main(Native Method) 
08-07 12:32:13.241: W/dalvikvm(995): threadid=4: spin on suspend #4 threadid=1 (pcf=0) 
08-07 12:32:13.241: I/dalvikvm(995): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE 
08-07 12:32:13.241: I/dalvikvm(995): | group="system" sCount=0 dsCount=0 obj=0x4050e148 self=0x288d08 
08-07 12:32:13.241: I/dalvikvm(995): | sysTid=999 nice=0 sched=0/0 cgrp=default handle=2078152 
08-07 12:32:13.241: I/dalvikvm(995): at dalvik.system.NativeStart.run(Native Method) 
08-07 12:32:13.241: I/dalvikvm(995): "main" prio=5 tid=1 RUNNABLE 
08-07 12:32:13.241: I/dalvikvm(995): | group="main" sCount=1 dsCount=0 obj=0x4001f190 self=0xce60 
08-07 12:32:13.241: I/dalvikvm(995): | sysTid=995 nice=0 sched=0/0 cgrp=default handle=-1345006496 
08-07 12:32:13.280: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:13.292: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:13.292: I/dalvikvm(995): at java.lang.Runtime.loadLibrary(Runtime.java:432) 
08-07 12:32:13.292: I/dalvikvm(995): at java.lang.System.loadLibrary(System.java:554) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:489) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:431) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) 
08-07 12:32:13.292: I/dalvikvm(995): at java.lang.Class.classForName(Native Method) 
08-07 12:32:13.292: I/dalvikvm(995): at java.lang.Class.forName(Class.java:234) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:453) 
08-07 12:32:13.292: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) 
08-07 12:32:13.296: I/dalvikvm(995): at ch.golfer.TrackSpot.process(TrackSpot.java:-1) 
08-07 12:32:13.296: I/dalvikvm(995): at ch.golfer.FullscreenActivity$7.onClick(FullscreenActivity.java:196) 
08-07 12:32:13.296: I/dalvikvm(995): at android.view.View.performClick(View.java:2538) 
08-07 12:32:13.296: I/dalvikvm(995): at android.view.View$PerformClick.run(View.java:9152) 
08-07 12:32:13.296: I/dalvikvm(995): at android.os.Handler.handleCallback(Handler.java:587) 
08-07 12:32:13.296: I/dalvikvm(995): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 12:32:13.296: I/dalvikvm(995): at android.os.Looper.loop(Looper.java:130) 
08-07 12:32:13.296: I/dalvikvm(995): at android.app.ActivityThread.main(ActivityThread.java:3688) 
08-07 12:32:13.296: I/dalvikvm(995): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 12:32:13.296: I/dalvikvm(995): at java.lang.reflect.Method.invoke(Method.java:507) 
08-07 12:32:13.296: I/dalvikvm(995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-07 12:32:13.296: I/dalvikvm(995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-07 12:32:13.296: I/dalvikvm(995): at dalvik.system.NativeStart.main(Native Method) 
08-07 12:32:14.046: W/dalvikvm(995): threadid=4: spin on suspend #5 threadid=1 (pcf=0) 
08-07 12:32:14.050: I/dalvikvm(995): "Signal Catcher" daemon prio=5 tid=4 RUNNABLE 
08-07 12:32:14.050: I/dalvikvm(995): | group="system" sCount=0 dsCount=0 obj=0x4050e148 self=0x288d08 
08-07 12:32:14.050: I/dalvikvm(995): | sysTid=999 nice=0 sched=0/0 cgrp=default handle=2078152 
08-07 12:32:14.050: I/dalvikvm(995): at dalvik.system.NativeStart.run(Native Method) 
08-07 12:32:14.050: I/dalvikvm(995): "main" prio=5 tid=1 RUNNABLE 
08-07 12:32:14.050: I/dalvikvm(995): | group="main" sCount=1 dsCount=0 obj=0x4001f190 self=0xce60 
08-07 12:32:14.050: I/dalvikvm(995): | sysTid=995 nice=0 sched=0/0 cgrp=default handle=-1345006496 
08-07 12:32:14.062: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:14.062: I/dalvikvm(995): at java.lang.Runtime.nativeLoad(Native Method) 
08-07 12:32:14.062: I/dalvikvm(995): at java.lang.Runtime.loadLibrary(Runtime.java:432) 
08-07 12:32:14.066: I/dalvikvm(995): at java.lang.System.loadLibrary(System.java:554) 
08-07 12:32:14.070: I/dalvikvm(995): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) 
08-07 12:32:14.073: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:489) 
08-07 12:32:14.073: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:431) 
08-07 12:32:14.077: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) 
08-07 12:32:14.077: I/dalvikvm(995): at java.lang.Class.classForName(Native Method) 
08-07 12:32:14.077: I/dalvikvm(995): at java.lang.Class.forName(Class.java:234) 
08-07 12:32:14.077: I/dalvikvm(995): at com.googlecode.javacpp.Loader.load(Loader.java:453) 
08-07 12:32:14.077: I/dalvikvm(995): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) 
08-07 12:32:14.077: I/dalvikvm(995): at ch.golfer.TrackSpot.process(TrackSpot.java:-1) 
08-07 12:32:14.077: I/dalvikvm(995): at ch.golfer.FullscreenActivity$7.onClick(FullscreenActivity.java:196) 
08-07 12:32:14.077: I/dalvikvm(995): at android.view.View.performClick(View.java:2538) 
08-07 12:32:14.077: I/dalvikvm(995): at android.view.View$PerformClick.run(View.java:9152) 
08-07 12:32:14.077: I/dalvikvm(995): at android.os.Handler.handleCallback(Handler.java:587) 
08-07 12:32:14.077: I/dalvikvm(995): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-07 12:32:14.077: I/dalvikvm(995): at android.os.Looper.loop(Looper.java:130) 
08-07 12:32:14.077: I/dalvikvm(995): at android.app.ActivityThread.main(ActivityThread.java:3688) 
08-07 12:32:14.077: I/dalvikvm(995): at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 12:32:14.077: I/dalvikvm(995): at java.lang.reflect.Method.invoke(Method.java:507) 
08-07 12:32:14.077: I/dalvikvm(995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
08-07 12:32:14.085: I/dalvikvm(995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
08-07 12:32:14.085: I/dalvikvm(995): at dalvik.system.NativeStart.main(Native Method) 

미리 도움을 청하십시오.

답변

0

나는이 문제를 발견,이 내 이론 :이 코드는 JNI를 통해 실행

; 따라서 이미지를 잡고 다른 이미지와 동일하게 설정하면 포인터 만 전달됩니다. 또한 getFrame 함수에서 그래버를 시작하기 때문에 이미지가 반환 될 때 그래버가 파괴되고 기묘한 이유로 메모리가 플러시되고 전달 된 포인터가 쓸모 없게됩니다.

그래버를 전역 변수로 설정하거나, 그래버를 getFrame 함수의 인수로 전달하거나, 이미지를 반환하기 전에 메모리를 건 드리는 opencv 연산을 실행하는 (이상하게) 것입니다. 즉 무언가에 cvCvSaveimage 또는 cvCvtColor를 호출해도 이미지와 관련되지 않아도됩니다.

제 설명이 의미가 있으며, 버그로보고해야하는지 잘 모르겠습니까?

관련 문제