发现轮廓错过了一些物体

时间:2017-06-28 13:53:09

标签: android image opencv

我使用以下代码来读取我从图像中分割出来的所有对象,这些对象应按行和列排列为半圆(因为用于降低噪声的分割和形态处理):

Imgproc.Canny(srcImg, srcImg, 50, 150);
Imgcodecs.imwrite("/mnt/sdcard/DCIM/cannyImg.jpg", srcImg);//check

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(srcImg, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0,0));

//int index = 0;
//double maximc = Imgproc.contourArea(contours.get(0));
for (int contourIdx = 1; contourIdx < contours.size(); contourIdx++) {
    double temp;
    temp = Imgproc.contourArea(contours.get(contourIdx));
    if (temp > 100) { 
                       // condition to differentiate between noise and objects
        Mat drawing = Mat.zeros(srcImg.size(), CvType.CV_8UC1);
        Imgproc.drawContours(drawing, contours, contourIdx, new Scalar(255), -1);

        Mat resultMat = new Mat();
        maskImg.copyTo(resultMat, drawing);
        Imgcodecs.imwrite("/mnt/sdcard/DCIM/resultImg" + contourIdx + ".jpg", resultMat);//check
     }   
}

然而,即使canny图像正确并且可以识别所有对象,循环也无法读取图像中的重要对象。我的问题是:在哪个顺序找到轮廓读取对象?还有另一种方法在Opencv中读取图像中的所有对象而不是查找轮廓?最后一个问题我用轮廓的大小来区分物体和噪音,所以这是好的,或者你可以建议其他方法。

感谢任何帮助

0 个答案:

没有答案