[안드로이드로 배우는 OpenCV] Convex hull 구하기

Prerequisite : 윤곽선 길이 구하기 Convex hull Convex hull이란 2차원 평면상에 여러개의 점이 있을 때, 점들 중 일부를 이용하여 Convex(볼록)한 다각형이면서, 다각형 내부에 모든 점을 포함시키는 것을 의미한다. 아래의 이미지를 참조하여 주어진 정점에 대한 Convex hull 알고리즘의 결과를 확인하자. 현재 OpenCV에서는 convex hull을 구하기 위해 convexHull()이라는 함수를 제공하며, 이는 Jack 더보기…

[안드로이드로 배우는 OpenCV] Convex 여부 검사하기

Prerequisite : 윤곽선 길이 구하기 Convex 검사 Convex 검사는 주어진 윤곽선이 볼록한지 여부를 확인하는 것을 말한다. OpenCV에서는 isContourConvex()라는 함수를 통해 Convex 검사를 할 수 있다. Imgproc.isContourConvex(contour) contour: 윤곽선 좌표 정보.반환값: convex 여부 convex를 검사하는 예제를 살펴보자. 볼록한 도형의 경우 Convex라고 마킹되어있고, 오목한 도형의 경우 Concave라고 마킹되어있다. 흰 바탕의 배경도 하나의 더보기…

[안드로이드로 배우는 OpenCV] 주어진 점에 적합한 직선 구하기 (fitLine)

Prerequisite : 윤곽선 길이 구하기 fitLine 함수 OpenCV에서는 fitLine이라는 함수를 제공하는데, 이는 주어진 점들을 적당히 감싸는 직선 정보를 구할 수 있다. fitLine 함수는 ∑iρ(ri)를 최소화하여 2D 또는 3D 점들의 집합에 선을 피팅하는데, 여기서 ri는 i번째 점과 선 사이의 거리이고, ρ(r)은 거리를 구하는 함수다. 거리를 구하는 함수의 종류는 다음과 같다. DIST_L2: ρ(r)=r2/2, 가장 더보기…

[안드로이드로 배우는 OpenCV] 주어진 점에 적합한 타원 구하기 (fitEllipse)

Prerequisite : 윤곽선 길이 구하기 fitEllipse 함수 OpenCV에서는 fitEllipse라는 함수를 제공하는데, 이는 주어진 점들을 적당히 감싸는 타원 정보를 구할 수 있다. Imgproc.fitEllipse(contour) contour: 윤곽선 좌표반환값: RotatedRect 타입의 타원 정보 fitEllipse와 함께 이미지 내 도형을 타원으로 적당히 감싸는 예제를 살펴보자. 예제코드: val contours = ArrayList<MatOfPoint>() val hierarchy = Mat() Imgproc.findContours( binarySrc, 더보기…

[안드로이드로 배우는 OpenCV] 윤곽선을 근사화하기

Prerequisite : 윤곽선 길이 구하기 윤곽선 근사화 윤곽선 근사화란 검출한 윤곽선 정보를 분석하여 정점(vertex) 수가 적은 윤곽선 또는 다각형으로 표현할 수 있게 만드는 방법을 의미 한다. 이때 Douglas-Peucker 알고리즘을 사용한다. OpenCV에서 윤곽선 근사화를 위해 approxPolyDP라는 함수를 제공하고 있다. approxPolyDP(curve, approxCurve, epsilon, closed) curve: 입력할 곡선 좌표(윤곽선 좌표) approxCurve: 함수 호출 더보기…

[안드로이드로 배우는 OpenCV] 바운딩 트라이앵글 구하기

Prerequisite : 윤곽선 길이 구하기 바운딩 트라이앵글 바운딩 트라이앵글(삼각형)이란 윤곽선을 외접하여 둘러싸는 가장 작은 삼각형을 의미한다. OpenCV에서는 minEnclosingTriangle라는 함수를 통해 바운딩 트라이앵글을 구할 수 있다. Imgproc.minEnclosingTriangle(contour, triangle) contour: 윤곽선 좌표triangle: 함수 호출 후 참조할 삼각형 정보 (Mat타입) minEnclosingTriangle 함수를 이용하여 이미지 내 도형을 감싸는 예제를 살펴보자. 예제코드: val contours = ArrayList<MatOfPoint>() 더보기…

[안드로이드로 배우는 OpenCV] 최소 크기의 회전된 바운딩 박스 구하기

Prerequisite : 윤곽선 길이 구하기, 바운딩 박스 최소 크기의 회전된 바운딩 박스 바운딩 박스를 회전시켜 구할 수 있다면, 더 작은 사각형으로 도형을 감쌀수 있다. OpenCV에서는 회전된 바운딩 박스를 구하는데 minAreaRect() 함수를 제공한다. Imgproc.minAreaRect(contour) contour: 윤곽선 좌표반환값: RotatedRect 타입의 회전된 사각형 정보 minAreaRect 함수를 사용하여 최소 크기의 회전된 바운딩 박스를 구하는 더보기…

[안드로이드로 배우는 OpenCV] 바운딩 써클 구하기

Prerequisite : 윤곽선 길이 구하기 바운딩 써클 바운딩 써클이란 윤곽선을 외접하여 둘러싸는 가장 작은 원을 의미한다. OpenCV에서는 minEnclosingCircle이라는 함수를 통해 바운딩 써클를 구할 수 있다. Imgproc.minEnclosingCircle(contour, center, radius) contour: 윤곽선 좌표center: 함수 호출 후 참조 가능한 도형의 중심점radius: 함수 호출 후 참조 가능한 바운딩 서클 반지름 minEnclosingCircle 함수를 이용하여 이미지 더보기…

[안드로이드로 배우는 OpenCV] 바운딩 박스 구하기

Prerequisite : 윤곽선 길이 구하기 바운딩 박스 바운딩 박스란 윤곽선을 외접하여 둘러싸는 가장 작은 사각형을 의미한다. OpenCV에서는 boundingRect라는 함수를 통해 바운딩 박스를 구할 수 있다. Imgproc.boundingRect(contour) contour: 외곽선 정보(좌표)반환값: 사각형 정보(Rect);(x,y,w,h) 정보를 포함 boundingRect함수를 이용하여 이미지내의 도형을 감싸는 예제를 살펴보자. 예제 코드: val contours = ArrayList<MatOfPoint>() val hierarchy = Mat() 더보기…

[안드로이드로 배우는 OpenCV] 윤곽선을 감싸는 면적의 크기를 구하기

OpenCV에서 제공하는 함수를 통해 윤곽선이 감싸는 영역의 면적을 구하는 방법을 알아보자. 윤곽선을 감싸는 면적 구하기 Imgproc.contourArea(contour) contour : 윤곽선 정보(좌표)oriented(optional) : true면 윤곽선 진행 방향에 따라 부호 있는 면적을 반환. 기본값은 false반환값 : 윤곽선으로 구성된 영역의 면적 위 함수를 이용하여 이미지 내에 포함된 도형들의 면적(픽셀갯수)을 구하는 예제를 만들어보자. 예제 코드: