2013-05-14 4 views
4

초보자로서 OpenCV를 통해 비트 맵을 그레이 스케일로 변환하고 싶습니다. 나는 모든 것을 실행하고있다. 그러나 이미지를 그레이 스케일로 변환하려고하면 곧바로 충돌이 일어난다. 누구든지 도와 줄 수 있습니까? 발췌 문장으로 충분하면 좋겠지 만 나머지는 첨부 할 수 없습니다. 자바 파일의Android 용 OpenCV : 이미지를 그레이 스케일로 변환하는 간단한 예

부분 :

   // convert to opencv structure 
       Mat image = new Mat(); 
       Mat grayimage = new Mat(); 
       Utils.bitmapToMat(b2, image); 

       // call opencv for processing 
       grayimage = convertToGray (image); 

       // convert back 
       Utils.matToBitmap(grayimage, b2); 

JNI의 CPP 파일 : 그것은 결코 이미지를 변환하는 데 성공 로그인에 도달하지

JNIEXPORT jlong JNICALL Java_com_my_sample_MainMenuActivity_convertToGray (JNIEnv*, jobject, jlong addrRGBA) 
{ 
    LOGI("Converting to Gray."); 
    Mat *mRGBA = (Mat*)addrRGBA; 

    Mat *_retval_; 
    cvtColor(*mRGBA, *_retval_, CV_RGB2GRAY); 

    LOGI("Successfully finished Converting to Gray."); 
    return (jlong) _retval_; 
} 

. 마치 비트 맵이 매트로 제대로 변환되지 않은 것처럼 보입니다. 비트 맵 자체가 존재하므로 ImageView에 표시 할 수 있습니다. 누구나 내가 (분명히) 잘못하고 있다는 것을 알 수 있습니까?

05-14 21:26:27.082: I/native(22394): Converting to Gray. 
05-14 21:26:27.082: A/libc(22394): Fatal signal 11 (SIGSEGV) at 0xcd10001d (code=1), thread 22394 (ialabs.mysample) 

이 질문에 다른 대답하면, 내가 매트, IplImage로 좀와 예제를 발견하지 않았습니다 죄송합니다, 그것은 보인다.

+1

[이 답변] (http://stackoverflow.com/questions/12695232/using-native-functions-in-android-with-opencv/12699835# 12699835)에는 이미지 데이터를 원시 코드로 전달하고 처리하는 예제가 있습니다. 그것은 당신의 주요 이슈 중 하나 인'cv :: Mat' 객체를 만드는 적절한 방법을 보여줍니다. – Aurelius

+0

네, 정확 합니다만, 개체 자체 대신 주소를 전달하는 것을 잊어 버렸습니다. 감사! – complexM

답변

0

간단한 오류 :

convertToGray (image.getNativeObjAddr()); 

올바른 것입니다.

9

두 개의 빈 Mat 개체가 있습니다. 비어있는 것을 회색으로 변환 할 수 없습니다.

이 시도 : bBitmap 같은 이미지입니다

Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1); 
Utils.bitmapToMat(b, tmp); 
Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY); 

.

Utils.matToBitmap(tmp, b); 

는 다시 BitmapMat 개체를 변환하려면이 옵션을 추가합니다.

0

가장 쉬운 방법은 그것을 할 수 있습니다 :

public static Bitmap edgesim(Bitmap first) { 

    Bitmap image1; 

    ///////////////transform back to Mat to be able to get Canny images////////////////// 
    Mat img1=new Mat(); 
    Utils.bitmapToMat(first,img1); 

    //mat gray img1 holder 
    Mat imageGray1 = new Mat(); 

    //mat canny image 
    Mat imageCny1 = new Mat(); 

    //mat canny image 
    Mat imageCny2 = new Mat(); 

    ///////////////////////////////////////////////////////////////// 

    //Convert img1 into gray image 
    Imgproc.cvtColor(img1, imageGray1, Imgproc.COLOR_BGR2GRAY); 

    //Canny Edge Detection 
    Imgproc.Canny(imageGray1, imageCny1, 10, 100, 3, true); 

    /////////////////////////////////////////////////////////////////// 

    //////////////////Transform Canny to Bitmap///////////////////////////////////////// 
    image1= Bitmap.createBitmap(imageCny1.cols(), imageCny1.rows(), Bitmap.Config.ARGB_8888); 
    Utils.matToBitmap(imageCny1, image1); 

    return image1; 
} 
관련 문제