2015-01-07 7 views
0

안드로이드 용 OpenCV를 사용하여 이미지를로드하고 처리 한 다음 이미지를 ImageView에 표시하는 간단한 응용 프로그램을 작성하려고합니다. . 내가 OpenCV의 포럼과 사람들이 주위에 검색 한은 아래의 코드는이 작업을 달성하는 전형적인 방법이라고 제안한다. OpenCV 오류 : 어설 션이 실패했습니다 (src.dims == 2 && info.height == (uint32_t)

public class mainactivity extends Activity { 

private Mat destination, source; 

static { 
    OpenCVLoader.initDebug(); 
} 

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 
    @Override 
    public void onManagerConnected(int status) { 
     if (status == LoaderCallbackInterface.SUCCESS) { 

      threshold(); 
     } else { 
      super.onManagerConnected(status); 
     } 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

} 

@Override 
public void onResume() {; 
    super.onResume(); 
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9,this, mLoaderCallback); 
} 

public void threshold(){ 

    try { 
     source = Highgui.imread(getAssets().open("10007.bmp").toString()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    destination = new Mat(source.rows(), source.cols(), source.type()); 

    Log.w("source type", String.valueOf(source.type())); 
    Log.w("source rows", String.valueOf(source.rows())); 
    Log.w("source columns", String.valueOf(source.cols())); 
    Log.w("source width", String.valueOf(source.width())); 
    Log.w("source height", String.valueOf(source.height())); 
    Log.w("source size", String.valueOf(source.size())); 

    Imgproc.threshold(source, destination, 127, 255, Imgproc.THRESH_TOZERO); 

    Log.w("destination type", String.valueOf(destination.type())); 
    Log.w("destination rows", String.valueOf(destination.rows())); 
    Log.w("destination columns", String.valueOf(destination.cols())); 
    Log.w("destination width", String.valueOf(destination.width())); 
    Log.w("destination height", String.valueOf(destination.height())); 

    Highgui.imwrite("ThreshZero.jpg", destination); 

    Bitmap bmp = Bitmap.createBitmap(640, 480, Config.ARGB_8888); 
    Utils.matToBitmap(source, bmp); 
    ImageView image= (ImageView) findViewById(R.id.imageView1); 
    image.setImageBitmap(bmp); 

} 
} 

불행하게도 코드 세트가 나에게 오류의 다음 세트를 (내가 로그 메시지를 포함 던졌습니다) :

01-07 13:59:49.934: W/source type(31303): 0 
01-07 13:59:49.934: W/source rows(31303): 0 
01-07 13:59:49.934: W/source columns(31303): 0 
01-07 13:59:49.934: W/source width(31303): 0 
01-07 13:59:49.935: W/source height(31303): 0 
01-07 13:59:49.935: W/source size(31303): 0x0 
01-07 13:59:49.937: W/destination type(31303): 0 
01-07 13:59:49.937: W/destination rows(31303): 0 
01-07 13:59:49.937: W/destination columns(31303): 0 
01-07 13:59:49.937: W/destination width(31303): 0 
01-07 13:59:49.937: W/destination height(31303): 0 
01-07 13:59:49.944: E/cv::error()(31303): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97 
01-07 13:59:49.944: E/org.opencv.android.Utils(31303): nMatToBitmap catched cv::Exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 
01-07 13:59:49.945: D/AndroidRuntime(31303): Shutting down VM 
01-07 13:59:49.946: E/AndroidRuntime(31303): FATAL EXCEPTION: main 
01-07 13:59:49.946: E/AndroidRuntime(31303): Process: com.example.test1, PID: 31303 
01-07 13:59:49.946: E/AndroidRuntime(31303): CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 
01-07 13:59:49.946: E/AndroidRuntime(31303): ] 

좋아요, 내가 읽은이 오류 세트는 나중에 읽은 것입니다. 비슷한 게시물은 내 대상 비트 맵이 매트 src와 비교할 때 다른 차원을 가지고 있다는 것입니다. 따라서 로그 및 열 차원을 관찰하기위한 로그 메시지가 포함되었으며 모두 0을 반영합니다. OpenCV 포럼에이 질문을 게시했지만 아직 도움을받지 못했습니다. 누구든지 pls 수 있습니다.

답변

0

imread()는 zippd 파일이나 apk jar (자산이 저장되는 곳)에서 읽을 수 없으므로 이미지가 비어 있거나 유효하지 않을 수 있습니다.

중 하나 거기에서 sdcard에하는 이미지 및 imread()를 복사하거나 감사 이봐 Utils.loadResource()

+0

을 시도! Utils.loadResource()는 작동하지만 imread()는 작동하지 않습니다. 예 : source = Highgui.imread (Environment.getExternalStorageDirectory()) \t \t \t \t .getAbsolutePath() + "/ CT Image/10007.bmp")는 같은 오류를 발생시킵니다. 경로를 확인했는데 경로가 올바른 이미지로 이동합니다. 왜 작동하지 않는거야? 나는 그 길을 잘못 설명하고 있는가? –

+0

흠. 아마, 내가 한 일이기도하다. 여기에 장치가 없으므로 안타깝게도 테스트 할 수 없습니다. – berak

관련 문제