使用OpenCV在白色区域周围切割图像 - Android

时间:2016-02-21 09:15:36

标签: android opencv image-processing detection opencv4android

我有一个眼睛区域的图像,我想在白色区域周围切割它,即,我只想保持眼睛的白色区域与虹膜内部。

下面的图片说明了我想做的事情,我只想保留用红线包围的区域。

enter image description here

搜索后我发现我可能会使用轮廓来找到我要剪切的白色区域,我用这两个例子来编写代码:

how to detect region of large # of white pixels using opencv?

http://answers.opencv.org/question/43700/android-using-drawcontours-to-fill-region/

但是,在应用轮廓后,我会得到一个完全黑色的图像。这是我的代码:

private void match_eye(org.opencv.core.Rect area, Mat mTemplate) {
    Point matchLoc;
    Mat mROI = grayMat.submat(area);
    int result_cols = mROI.cols() - mTemplate.cols() + 1;
    int result_rows = mROI.rows() - mTemplate.rows() + 1;
    // Check for bad template size
    if (mTemplate.cols() == 0 || mTemplate.rows() == 0) {
        return ;
    }

    Mat mResult = new Mat(result_cols, result_rows, CvType.CV_8U);

    /*************Here starts finding contours of the image*******************/
    Imgproc.threshold(mROI, mROI,127, 255, Imgproc.THRESH_BINARY );
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    Mat hierarchy = new Mat();
    Imgproc.findContours(mROI, contours, hierarchy, Imgproc.RETR_LIST, 
                            Imgproc.CHAIN_APPROX_SIMPLE); //finding the white region.

    for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++) {

        if ( 10 < Imgproc.contourArea(contours.get(contourIdx))){

            Imgproc.drawContours(mROI, contours,contourIdx, new Scalar(0,0,255),2);
        }
    }//end for.

    Imgproc.resize(mROI, mROI, new Size (1000, 1500));
    Bitmap contour =  Bitmap.createBitmap(mROI.width(), mROI.height(), 
                            Bitmap.Config.ARGB_8888);

    Utils.matToBitmap(mROI, contour);

    //store the image with the found contours in the gallery: 
    MediaStore.Images.Media.insertImage(getContentResolver(),contour, 
                            "testgray", "gray" );
}

注意上面代码中的mROI是眼睛区域的图像。

如何解决此问题?

感谢。

0 个答案:

没有答案