2013-09-11 5 views
1

В основном я пытаюсь нарисовать первый контур с цветом. Но эта программа вылетает с после ошибкивычерчивание контуров с ошибкой opencv

////////////////////////////////////// ///////////////////// 9-11 09: 56: 38.230: D/dalvikvm (1920): GC_FOR_ALLOC освобожден 71K, 10% бесплатно 2824K/3124K, приостановлено 0ms, общая 3ms

09-11 09: 56: 38,340 D/dalvikvm (1920): GC_FOR_ALLOC освободил 379k, 17% бесплатно 2958K/3564K, приостановлена ​​3 мс, общий 4ms

09-11 09:56 : 38.360: D/dalvikvm (1920): GC_FOR_ALLOC освобожден 107K, 10% бесплатно 3361K/3696K, приостановлено 2 мс, всего 3 мс

09-11 09: 56: 38.390: D/d alvikvm (1920): GC_FOR_ALLOC освобожден 170K, 10% бесплатно 3702K/4100K, приостановлено 4 мс, всего 4 мс

09-11 09: 56: 38.420: E/cv :: error() (1920): Ошибка OpenCV: Плохо аргумент (Неизвестный тип массива) в cv :: Mat cv :: cvarrToMat (const CvArr *, bool, bool, int), файл/home/reports/ci/slave_desktop/50-SDK/opencv/modules/core/src/matrix .cpp, линия 698

09-11 09: 56: 38,430 A/Libc (1920): фатальный сигнал 11 (SIGSEGV) при 0x00000000 (код = 1), поток 1920 (pencvratstudy01)

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

Программа is

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    Log.i(TAG, "called onCreate"); 
    super.onCreate(savedInstanceState); 

    if (!OpenCVLoader.initDebug()) { 
     // Handle initialization error 
    } 
    setContentView(R.layout.activity_main); 


    // load an image from Resource directory 
    Mat mMat = new Mat(); 
    try { 
     mMat = Utils.loadResource(this, R.drawable.baby, 
               Highgui.CV_LOAD_IMAGE_COLOR); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    // Create result object with correct color 
    Mat result = new Mat(); 
    Imgproc.cvtColor(mMat, result, Imgproc.COLOR_RGB2BGRA); 


    // create tmpMat object for gray image and blur it 
    Mat tmpMat = new Mat(); 
    Imgproc.cvtColor(result,tmpMat , Imgproc.COLOR_BGR2GRAY); 
    Imgproc.blur(tmpMat, tmpMat, new Size(3,3)); 


    /* find cany of tmpMat */ 
    Mat canny = new Mat(); 
    Imgproc.Canny(tmpMat, canny , 2 , 4); 

    // find contours 
    Mat hierarchy = new Mat(); 
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
    Imgproc.findContours(canny, contours, hierarchy, Imgproc.RETR_EXTERNAL, 
                Imgproc.CHAIN_APPROX_SIMPLE); 

    // draw contour on mask object 
    Mat mask = new Mat(); 
    Imgproc.drawContours(mask, contours, 0 , new Scalar(255)); 


    // create bitmap and draw on imageView 
    Bitmap bmp; 
    bmp = Bitmap.createBitmap(mask.cols(), mask.rows(), Bitmap.Config.ARGB_8888); 
    Utils.matToBitmap(mask, bmp); 

    ImageView imgView = (ImageView) findViewById(R.id.sampleImageView); 
    imgView.setImageBitmap(bmp); 


} 

В чем проблема?

ответ

0

Проблема заключается в том, что вы даете неправильный тип мата к методу drawContours, вы можете использовать

Mat mask = Mat.zeros(result.rows(),result.cols(),result.type()); 

Еще советую бы загрузить OpenCV до OnCreate, используя статический блок:

static { 
    if (!OpenCVLoader.initDebug()) { 
     // Handle initialization error 
    } 
} 
Смежные вопросы