OpenCv4Android Library를 사용하고 있으며 샘플 프로그램 color-blob-detection을 사용하고 있습니다. 이것으로 , 윤곽을 그리려면, 그들은 먼저 식을 필터링 : 그들은 필터링 된 각 스칼라 곱을 사용 된 후에 큰 형상의 윤곽 (면적> 0.1 * (면적) 다음contour plot OpenCV4Android 라이브러리
if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
Core.multiply(contour, new Scalar(4,4), contour);
mContours.add(contour);
등고선의 목적은 무엇입니까? 여러 개의 작은 윤곽선을 병합하는 것입니까? 아이디어를 얻지 못했습니다. 두 번째 이유는 왜 곱셈 계수 Scalar (4,4)를 사용했는지, 다른 이유는 무엇입니까?
코드 :
Imgproc.pyrDown(rgbaImage, mPyrDownMat);
Imgproc.pyrDown(mPyrDownMat, mPyrDownMat);
Imgproc.cvtColor(mPyrDownMat, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL);
Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask);
Imgproc.dilate(mMask, mDilatedMask, new Mat());
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
// Find max contour area
double maxArea = 0;
Iterator<MatOfPoint> each = contours.iterator();
while (each.hasNext()) {
MatOfPoint wrapper = each.next();
double area = Imgproc.contourArea(wrapper);
if (area > maxArea)
maxArea = area;
}
// Filter contours by area and resize to fit the original image size
mContours.clear();
each = contours.iterator();
while (each.hasNext()) {
MatOfPoint contour = each.next();
if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
Core.multiply(contour, new Scalar(4,4), contour);
mContours.add(contour);
Imgproc.drawContours(mRgba, mContours, -1, CONTOUR_COLOR);
이 문서에서 이미 분명하다 ...하지만 필요한 덩어리를 얻을 수), 1) 왜 스칼라 떨어 졌 곱해야합니까? 2) 내가 스칼라 (3,3)로 바꿀 때 윤곽선이 작아지고 (분명히), 어긋나게된다. 왜 그런지 이해할 수 없다 !! – sumit
질문에 "몇 가지 작은 등고선을 병합합니까?"라고 묻습니다. 나는 그것이 사실이 아니기 때문에 그것이 내가 그 점을 분명히하려는 이유라고 생각한다. –