我有一个眼睛区域的图像,我想在白色区域周围切割它,即,我只想保持眼睛的白色区域与虹膜内部。
下面的图片说明了我想做的事情,我只想保留用红线包围的区域。
搜索后我发现我可能会使用轮廓来找到我要剪切的白色区域,我用这两个例子来编写代码:
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是眼睛区域的图像。
如何解决此问题?
感谢。