[안드로이드로 배우는 OpenCV] Moments

Moments 모멘트(moments)는 한 점이나 축에 대한 분포를 나타낸다. 그렇기 때문에 OpenCV에서 모멘트는 이미지 픽셀 강도의 평균을 나타낸다. 즉, 모멘트란 영상의 형태를 표현하는 일련의 실수값이라고 볼 수 있다. 컴퓨터는 카메라 영상과 같은 실시간 이미지 처리시에 이미지의 픽셀 값들을 어떤 숫자로 변환한다. 영상에서 두개의 연속된 프레임(이미지) 사이에는 반드시 어떠한 변화 또는 움직임이 더보기…

[안드로이드로 배우는 OpenCV] 그랩컷(GrabCut)

그랩컷(GrabCut) 그랩컷 알고리즘은 영국 캠브릿지 마이크로소프트 연구소의 Carsten Rother, Vladimir Kolmogorov 및 Andrew Blake가 만들었다. 그들의 논문인  “GrabCut”: interactive foreground extraction using iterated graph cuts 에서 확인할 수 있다. 이 알고리즘은 최소한의 상호 작용으로 전경(객체) 추출을 돕는다. 처음에 사용자가 전경 영역 주변에 사각형(Rectangle)을 그린다. 그러면 알고리즘은 최상의 결과를 얻기 위해 더보기…

[안드로이드로 배우는 OpenCV] 문서(명함) 인식기 만들기

Prerequisite : 이미지의 이진화, 윤곽선 검출, 윤곽선 근사화, 투시 변환, OCR 개요 이번 장에서는 간단한 문서 인식 앱을 만들어본다. 현재까지 공부한 내용을 잘 짜집기 하면 만들 수 있는 내용이다. 하나씩 분할 정복을 통해 목표에 접근해보자. Divide n Conquer 위 그림과 같은 앱을 만들기 위해서는 다음과 같은 과정을 거쳐야 한다. 1. 더보기…

[안드로이드로 배우는 OpenCV] 볼록 결함 찾기 (convexity defects)

Prerequisite : 윤곽선 길이 구하기, Convex hull 볼록 결함 찾기 지난 시간에 Convex hull에 대해서 알아보았다. 이 포스팅에서는 볼록 결함(convexity defect)를 찾는 방법에 대해서 알아본다. 볼록 결함이란 convex hull로 부터 오목하게 들어간 윤곽선 중 가장 멀리 떨어진 부분을 찾는 방법이라고 할 수 있다. 자세한 내용은 stackoverflow의 한 답변으로 대체한다. OpenCV에서는 더보기…

[안드로이드로 배우는 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>() 더보기…