[OpenCV] FAST 코너 검출

이번 글에서는 FAST 코너 검출에 대해 알아보겠습니다. 이전 글에서 배운 해리스 코너 검출 이후로 몇몇 코너 검출 방법이 생겨났습니다. 하지만 이러한 검출 방법은 연산 속도가 느리다는 단점이 있습니다. FAST 코너 검출은 이러한 코너 검출보다 빠른 장점이 있습니다. 방법 FAST 코너 검출은 점 p를 둘러싸고 있는 1번부터 16번까지의 픽셀의 밝기를 비교합니다. 점 p가 코너인지 아닌지를 판단하는 … Read more

[OpenCV] 해리스(Harris) 코너 검출

이번 글에서는 코너 검출에 대한 개념과 대해 알아보겠습니다. 특징 – feature 우선 영상에서 특징에 대해 알아보겠습니다. 특징(feature)은 영상에서 검출할 수 있는 유용한 정보를 말합니다. 유용한 정보라는 것은 예를들어 코너, 히스토그램, 에지, 직선 등등이 있습니다. 코너의 특징은 에지의 방향이 급격하게 변하는 부분으로 사각형에서 꼭지점, 바늘의 끝 부분 등 뾰족하게 튀어나온 부분을 의미합니다. 예를들어 아래 그림에서 빨간 부분이 … Read more

[OpenCV] HOG 알고리즘 – 보행자 검출

이번 글에서는 HOG(Histograms of Oriented Gradients) 알고리즘에 대해 알아보겠습니다. HOG 알고리즘은 2005년에 N. Dalal과 B. Triggs가 발표한 알고리즘 입니다. HOG는 그래디언트 방향 히스토그램을 의미합니다. HOG 알고리즘은 다음 작동 방식을 가집니다. 1. 영상에서 64 X 128 크기 영상을 추출하여 계산합니다. 2. 그 다음 그래디언트를 계산하여 방향을 0 ~ 180도로 설정합니다. 예를 들어 소벨 연산을 한 뒤 cartToPolar 함수를 통해 그래디언트 … Read more

[OpenCV] QR Code generator로 QR 코드 만들고 Mat으로 변환하기

이번 글에서는 QR코드를 만드는 방법에 대해 알아보겠습니다. QR코드 생성과 관련해서는 여러 라이브러리가 있지만 이 글에서는 QR Code generator를 사용하겠습니다.여기에서 파일을 다운 받아 줍니다 cpp 폴더에 파일명이 qrcodegen인 hpp와 cpp파일을 프로젝트에 복사해 추가해줍니다. QR Code generator를 사용하기 위해 코드에 qrcodegen.hpp을 include 해줍니다. 라이브러리에서 제공해주는 QR Code 클래스 명칭은 QrCode 입니다. QrCode 클래스의 encodeText 멤버 함수를 사용하면 쉽게 QR코드를 생성할 수 있습니다. 첫번째 인자는 QR코드에 들어갈 텍스트, 두번째 인자는 오류복원 레벨입니다.참고로 오류복원 레벨은 QR Code 이미지가 훼손되더라도 데이터를 복구 할 수 있는 기능을 말하며, 레벨을 높이면 코드의 크기가 커집니다. 어쨌든 encodeText 함수를 수행하며 QrCode 객체를 반환받았습니다.이 QrCode 객체를 Mat 객체로로 변환하기 위해서 MakeQrCodeMat 함수를 선언해줍니다. 첫번째 인자는 입력 QrCode 객체, 두번째 인자는 테두리 입니다.QR Code 이미지에 테두리를 넣으려면 iBorder에 값을 입력하면 됩니다. … Read more

[OpenCV] QR Code 인식하기

이번 글에서는 OpenCV를 통하여 QR 코드를 인식하는 법에 대해 알아보겠습니다. QR코드는 아래와 같은 예시 이미지를 말하며, DENSO WAVE가 개발한 고속 판독용 매트릭스 2차원 코드입니다. 좌측, 우측 상단, 좌측 하단의 정사각형 패턴으로 QR 코드 영상이라고 판단 하며, QR 코드는 최소 21×21, 최대 177×177 심볼 크기를 가지며, 최대 크기의 QR코드는 7089개의 숫자 또는 4269개의 영숫자를 담고있습니다. QR코드는 이러한 특성으로 지정된 링크나 앱에 … Read more

[OpenCV] 캐스케이드 분류기, 얼굴 검출

이번 글에서는 얼굴 검출에 대해 알아보겠습니다. OpenCV에서는 얼굴 검출에 대한 몇가지 방법을 제공하며, 이번 글에서는 캐스케이드 분류기(cascade classifier)에 대해 알아보겠습니다. 우선, 캐스케이드 분류기에 대해 알아 보기전에 비올라-존스 알고리즘에 대해 알아보겠습니다. 비올라-존스 알고리즘 비올라-존스 알고리즘은 얼굴 검출에 사용되는 알고리즘입니다. 비올라-존스 알고리즘의 순서는 아래와 같습니다. 유사-하르 필터는 흰색 사각형과 검은색 사각형이 붙어있는 형태로 구성된 필터입니다. 왜 이런 형태일까요? 유사-하르 … Read more

[OpenCV] 템플릿 매칭 – matchTemplate

이번 글에서는 템플릿 매칭(Template Maching)에 대해 알아보겠습니다. 템플릿 매칭이란 어떠한 영상에서 템플릿 영상과 일치하는 영상을 찾는 것을 말합니다. 템플릿 영상은 찾을 대상이 되는 작은 크기의 영상을 의미합니다. 예를들어 아래와 같이 레나 영상에서 레나 얼굴을 찾고 싶으면, 레나의 얼굴 크기만한 템플릿 영상을 전체 영상 영역을 이동하면서 유사도와 비유사도를 계산하여 찾아냅니다. 유사도는 템플릿 영상과 비슷한 부분에서 값이 크게 나타나며, 비유사도는 비슷한 부분에서 값이 … Read more

[OpenCV] 2. 외곽선 응용 – approxPolyDP, 외곽선 또는 곡선 근사화

이번 글에서는 외곽선 검출 응용인 외곽선 근사화에 대해 알아보겠습니다. 더글라스 포이커(Douglas-Peucker) 알고리즘 우선 외곽선 또는 곡선을 근사화하는 더글라스-포이커 알고리즘에 대해 알아보겠습니다. 더글라스-포이커 알고리즘은 아래 순서를 따릅니다. 위 이미지는 더글라스-포이커 알고리즘을 설명하는 샘플 움짤입니다. approxPolyDP OpenCV에서는 외곽선 또는 곡선을 근사화하는 approxPolyDP 함수를 제공합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 같습니다. 이상으로 외곽선 근사화에 대해 알아보았습니다.

[OpenCV] 1. 외곽선 응용

이전 글에서 findContours 함수를 이용하여 외곽선을 검출하였습니다. 이렇게 검출한 외곽선 정보에서 객체의 위치, 크기 등의 정보를 추출하는 방법에 대해서 알아보겠습니다. 객체를 감싸는 사각형, 원 구하는 함수 함수부터 빠르게 알아보겠습니다. 외곽선 정보에서 바운딩 박스를 구하기 위해서 boundingRect  함수를 사용합니다. 객체를 최소한으로 감싸는 사각형을 구하는 함수는 minAreaRect 함수 입니다. 객체를 최소한으로 감싸는 원을 구하는 함수는 minEnclosingCircle 함수 입니다. 샘플 코드는 아래와 같습니다. 실행 결과는 … Read more

[OpenCV] 외곽선 검출 – findContours

이번 글에서는 객체의 외곽선(contours)을 검출하는 방법에 대해 알아보겠습니다. 외곽선 검출은 레이블링과 더불어 영상에서 객체의 정보를 검출하는 방법 중 하나입니다. 개념 영상에서 객체의 외곽을 검출하는 방법에 대해 알아보겠습니다.외곽선 검출은 이진화된 영상에서 검출이 이루어지며 배경 영역과 닿아 있는 픽셀을 찾아 외곽선으로 인식합니다. 검은색은 배경, 흰색이 객체일 때 하늘색 픽셀은 외곽선으로 인식합니다. 그리고 이 외곽선들을 배열로 반환해 줍니다. 외곽선의 계층 … Read more