我使用以下代码来读取我从图像中分割出来的所有对象,这些对象应按行和列排列为半圆(因为用于降低噪声的分割和形态处理):
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中读取图像中的所有对象而不是查找轮廓?最后一个问题我用轮廓的大小来区分物体和噪音,所以这是好的,或者你可以建议其他方法。
感谢任何帮助