목록OpenCV (33)
귀퉁이 서재
이번 포스팅에서는 HOG 디스크립터에 대해 알아보겠습니다. 이번에도 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리했습니다. 기울기 벡터(Gradient Vectors) 기울기 벡터란 영상 내 하나의 픽셀을 기준으로 주변 픽셀에 대한 기울기를 나타내는 벡터를 의미합니다. 말이 좀 어려운데 아래 예시 그림을 보겠습니다. 펭귄 머리 부분을 확대해보겠습니다. 빨간 점으로 표시된 픽셀을 기준으로 왼쪽의 Gray Scale 값은 56이고, 오른쪽의 값은 94입니다. Gray Scale의 경우 0이면 검은색이고 255이면 흰색입니다. 따라서 Gray Scale 값 94가 56보다 밝습니다. 위 그림에서 실제로도 오른쪽이 밝죠? 이때 빨간 점으로 표시된 픽셀 입장에서 x축 방향의 변화량(gx)은 (94..
이번 포스팅에서는 객체 추적을 위한 Tracking API에 대해 배워보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track Tracking API OpenCV에서는 객체 추적을 위한 Tracking API를 제공합니다. Tracking API를 이용하면 쉽게 객체 추적을 할 수 있습니다. 알고리즘 이론을 몰라도 됩니다. 추적하고자 하는 객체만 지정해주면 API가 알아서 객체를 추적해줍니다. 편리하죠? OpenCV에서 제공하는 Tracking API생성자는 아래와 같습니다. 생성자는 알고리즘에 따라 다양합니다. ..
이번 포스팅에서는 객체 추적 방법인 광학 흐름에 관해 배워보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 광학 흐름(Optical Flow) 광학 흐름이란 영상 내 물체의 움직임 패턴을 말합니다. 이전 프레임과 다음 프레임 간 픽셀이 이동한 방향과 거리 분포입니다. 광학 흐름으로 영상 내 물체가 어느 방향으로 얼마만큼 움직였는지 파악할 수 있습니다. 더불어 추가 연산을 하면 물체의 움직임을 예측할 수도 있습니다. 광학 흐름은 다음 두 가지 사실을 가정합니다. 1. 연속된 프레임 사이에서 움직이는 물체의 픽..
이번 포스팅에서는 객체 추적 방법인 배경 제거에 대해 배워보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 객체 추적(Object Tracking) 동영상에서 지속적으로 움직이는 객체를 찾는 방법을 객체 추적이라고 합니다. 객체 추적 방법은 여러 가지가 있습니다. 몇 가지만 알아보겠습니다. 이번 포스팅에서는 배경 제거에 대해 알아보겠습니다. 배경 제거(Background Subtraction) 객체 추적을 위해 객체가 무엇인지, 어디 있는지부터 명확히 파악해야 합니다. 객체를 명확히 파악하기 위한 방법이 바..
이번 포스팅은 이전 포스팅의 후속 편입니다. 이전 포스팅에서는 특징 매칭에 대해 알아봤습니다. 그러나 잘못된 특징 매칭이 너무 많았습니다. 잘못된 특징 매칭은 제외하고 올바른 매칭점을 찾는 작업이 추가로 필요합니다. 이번 포스팅에서는 올바른 매칭점을 찾는 방법에 대해 배워보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 올바른 매칭점 찾기 이전 포스팅에서 match(), knnMatch(), radiusMatch() 함수를 활용하여 매칭점을 찾는 실습을 했습니다. 그러나 잘못된 매칭 결과가 굉장히 많이 포함..
이번 포스팅에서는 특징 매칭에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 특징 매칭(Feature Matching) 특징 매칭이란 서로 다른 두 이미지에서 특징점과 특징 디스크립터들을 비교해서 비슷한 객체끼리 짝짓는 것을 말합니다. OpenCV는 특징 매칭을 위해 아래와 같은 특징 매칭 인터페이스 함수를 제공합니다. matcher = cv2.DescriptorMatcher_create(matcherType): 매칭기 생성자 matcherType: 생성할 구현 클래스의 알고리즘 ("BruteF..
이번 포스팅에서는 특징 디스크립터 검출기에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이전 포스팅에서 설명했다시피 특징점이란 말 그대로 이미지에서 특징이 되는 부분을 의미합니다. 이미지끼리 서로 매칭이 되는지 확인을 할 때 각 이미지에서의 특징이 되는 부분끼리 비교를 합니다. 즉, 이미지 매칭 시 사용하는 것이 바로 특징점입니다. 특징점은 영어로 키 포인트(Keypoints)라고도 합니다. 특징 디스크립터 이 특징점은 객체의 좌표뿐만 아니라 그 주변 픽셀과의 관계에 대한 정보를 가집니다. 그..
이번 포스팅에서는 이미지의 특징점과 특징점 검출기 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이전 포스팅에서 다룬 특징 추출과 매칭 방법은 이미지 전체를 전역적으로 반영하는 방법입니다. 전역적으로 반영하기 위해서는 비교하려는 두 이미지 내 물체가 거의 비슷한 모양을 가지고 있어야 합니다. 크기가 다르다거나 회전을 했다거나 방향이 다르면 효과가 없습니다. 이런 경우 이미지를 검출하기 위해서는 이미지의 특징점을 찾아내야 합니다. 이미지 특징점 이미지 특징점이란 말 그대로 이미지에서 특징이 되는 ..
이번 포스팅에서는 이미지 매칭에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/08.match_track 이미지 매칭(Image Matching) 이미지 매칭이란 서로 다른 두 이미지를 비교해서 짝이 맞는 같은 형태의 객체가 있는지 찾아내는 기술을 말합니다. 이미지에서 객체를 찾는 방법은 이미지에서 의미 있는 특징들을 적절한 숫자로 변환하고 그 숫자들을 서로 비교해서 얼마나 비슷한지 판단하는 것입니다. 쉽게 말해 두 이미지 간 유사도를 측정하는 작업입니다. 특징을 대표할 수 있는 숫자를 특징 벡터 혹은 특징 디스크립터라고..
이전 포스팅에서는 외곽 경계를 이용해서 객체 영역을 분할하는 방법에 대해 알아봤습니다. 하지만 실제 이미지에는 노이즈도 많고, 경계선이 명확하지 않아 객체 영역을 정확히 분할하는 것이 힘든 경우도 있습니다. 그래서 연속된 영역을 찾아 분할하는 방법도 필요합니다. 이번 포스팅에서는 연속 영역 분할에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 거리 변환 (Distatnce Transformation) 이미지에서 물체 영역을 정확히 파악하기 위해서는 물체 영역의 뼈대를 찾아야 합니다. 뼈대를 검..
이번 포스팅에서는 허프 변환에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 허프 변환 허프 변환을 활용해 이미지에서 직선이나 원과 같은 다양한 모양을 인식할 수 있습니다. 여기서는 직선과 원을 검출하는 함수에 대해 배워보겠습니다. 허프 변환에 대한 이론적인 설명은 opencv 한글문서를 참고해주시기 바랍니다. 혹은 한글 위키피디아도 도움이 됩니다. 허프 선 변환 이미지는 수많은 픽셀로 구성되어 있습니다. 그 픽셀 중 서로 직선 관계를 갖는 픽셀들만 골라내는 것이 허프 선 변환의 핵심입니다. ..
이번 포스팅에서는 영상 분할 방법 중 하나인 컨투어에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/07.segmentation 컨투어(Contour) 컨투어(contour)는 등고선을 의미합니다. 등고선은 지형의 높이가 같은 영역을 하나의 선으로 표시한 것입니다. 영상에서 컨투어를 그리면 모양을 쉽게 인식할 수 있습니다. OpenCV에서 제공하는 컨투어 함수는 다음과 같습니다. dst, contours, hierarchy = cv2.findContours(src, mode, method, contours, hierarc..
이번 포스팅에서는 블러링을 활용한 모자이크 처리와 이미지에 스케치 효과를 적용하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 블러링을 활용한 모자이크 처리 마우스로 드래그하여 선택한 부분을 블러링 효과로 모자이크 처리를 해보겠습니다. 마우스 드래그 후 엔터를 눌러주면 됩니다. # 블러링을 활용한 모자이크 (workshop_mosaic2.py) import cv2 ksize = 30 # 블러 처리에 사용할 커널 크기 win_title = 'mosaic' # 창 제목 img = cv2.imread..
이번 포스팅에서는 이미지 피라미드에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 이미지 피라미드(image pyramid)란 이미지의 크기를 피라미드처럼 단계적으로 확대하거나 축소하는 작업을 말합니다. 가우시안 피라미드 가우시안 필터를 적용한 뒤 이미지 피라미드를 구성하는 것을 가우시안 피라미드(gaussian pyramid)라고 합니다. OpenCV에서는 아래와 같은 가우시안 피라미드 함수를 제공합니다. dst = cv2.pyrDown(src, dst, dstsize, borderType) dst =..
이번 포스팅에서는 모폴로지라는 개념에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 모폴로지(morphology)란 '형태학'이라는 뜻입니다. 이는 영상 분야에서 노이즈 제거, 구멍 채우기, 끊어진 선 이어 붙이기 등에 쓰이는 형태학적 연산을 말합니다. 모폴로지 연산은 검은색과 흰색으로만 구성되어 있는 바이너리(binary) 이미지에 적용할 수 있습니다. 모폴로지 연산으로는 침식, 팽창, 열림, 닫힘이 있는데 이에 대해 차례대로 배워보겠습니다. 침식 연산 침식(erosion)이란 말 그대로 형태를 깎아 ..
이번 포스팅부터는 경계를 검출하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 지금까지는 영상을 흐릿하게 하는 블러링에 대해 알아봤습니다. 이번 포스팅에서는 반대로 영상의 경계를 뚜렷하게 만드는 방법에 대해 알아보겠습니다. 영상의 경계를 선명하고 뚜렷하게 만드는 작업을 샤프닝(sharpening)이라고 합니다. 샤프닝은 영상에서 경계를 검출하여 경계에 있는 픽셀을 강조합니다. 기본 미분 필터 경계(엣지)를 검출하기 위해서는 픽셀 값이 급격하게 변하는 지점을 찾아야 합니다. 경계 부분에서는 당연히..
이번 포스팅부터는 영상 필터에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/06.filter 시작하기 앞서 용어에 대해 먼저 정의하고 가겠습니다. 영상 처리는 새로운 영상을 얻기 위해 기존 픽셀 값에 어떤 연산을 가해서 새로운 픽셀 값을 얻는 작업입니다. 새로운 픽셀 값을 얻을 때 하나의 픽셀 값이 아닌 그 주변 픽셀들의 값을 활용하는 방법을 공간 영역 필터링(spacial domain filtering)라고 합니다. 또한, 블러링(Blurring)이란 기존의 영상을 흐릿하게 만드는 작업을 뜻합니다. 필터(Filter)..
이번 포스팅에서는 지금까지 배웠던 내용을 기반으로 실습을 해보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 실습 1: 모자이크 처리 이미지의 특정 영역을 마우스로 클릭하면 모자이크 처리가 되게 하는 실습을 해보겠습니다. 모자이크 처리의 원리는 간단합니다. 모자이크를 적용할 관심 영역의 이미지를 특정 비율로 축소시킨 뒤 다시 확대를 하면 됩니다. 크기가 작은 이미지를 최대 픽셀 값 이상의 크기로 확대하면 이미지가 깨집니다. 이 원리를 적용한 것입니다. 관심 영역을 축소했다가 다시 확대하면 원래..
이번 포스팅에서는 렌즈를 왜곡하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 렌즈 왜곡(Lens Distortion) 지금까지 이미지 이동(Translation), 확대/축소(Scaling), 회전(Rotation), 어핀 변환(Affine Transformation), 원근 변환(Perspective Transformation)에 대해 배웠습니다. 이는 모두 변환 행렬을 이용해서 구할 수 있습니다. 하지만 변환 행렬로는 구할 수 없는 모양의 변환도 있습니다. 렌즈 왜곡..
이번 포스팅에서는 이미지를 뒤트는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 이전 포스팅에서는 이미지를 이동, 확대/축소, 회전하는 방법에 대해서 알아봤습니다. 이동, 확대/축소, 회전을 한 후에는 이미지의 모양이 그대로 유지되지만, 이번 포스팅에서 배울 이미지 뒤틀기(wraping)를 하면 기존 모양과 달라집니다. 이미지 뒤틀기에는 크게 두 가지가 있는데 어핀 변환과 원근 변환이 있습니다. 어핀 변환(Affine Transform) 어핀 변환은 뒤틀기 방법 중 하나입니..