본문 바로가기

opencv26

[OpenCV] 21. 영상의 특징과 키 포인트 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 앞서 다룬 특징 추출과 매칭 방법은 영상 전체를 전역적으로 반영하는 방법이다. 전역적 매칭은 비교하려는 두 영상의 내용이 거의 대부분 비슷해야 하고, 다른 물체에 가려지거나 회전이나 방향, 크기 변화가 있으면 효과가 없다. 그래서 여러 개의 지역적 특징을 표현할 수 있는 방법이 필요하다. 21.1 코너 특징 검출 사람은 영상 속 내용을 판단할 때 주로 픽셀의 변화가 심한 곳에 중점적으로 관심을 두게 된다. 그 중에서도 엣지와 엣지가 만나는 코너(corner)에 가장 큰 관심을 둔다. 코너는 영상의 특징을 아주 잘.. 2023. 5. 3.
[OpenCV] 20. 비슷한 그림 찾기 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 영상 속 객체를 인식하는 방법 중 하나로 비슷한 그림을 찾아내는 방법 20.1 평균 해시 매칭 평균 해시 매칭(average hash matching) 은 영상을 동일한 크기의 하나의 숫자로 변환하는데, 이때 숫자를 얻기 위해서 평균값을 이용하는 방법이다. 평균을 얻기 위해서 영상을 특정한 크기로 축소하고, 픽셀 전체의 평균값을 구해서 각 픽셀의 값이 평균보다 작으면 0, 크면 1로 일괄 변환한다. 권총 이미지를 평균 해시를 통해 변환 import cv2 import numpy as np import matplo.. 2023. 4. 10.
[OpenCV] 19. 연속 영역 분할 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 외곽 경계를 이용해서 객체 영역을 분할하는 방법은 실생활에서 경계선이 분명하지 않아 문제를 해결하기 어려운 경우가 많다. 그래서 영상 분할에서는 연속된 영역을 찾아 분할하는 방법도 함께 사용한다. 19.1 거리 변환 영상에서 물체의 영역을 정확히 파악하기 위한 방법으로 물체의 최중심점을 찾는 것이 중요하다. 사람이나 동물의 뼈대 같은 것으로 흔히 **스켈레톤(skeleton)** 이라고 한다. 스켈레톤을 검출하는 방법 중 하나가 주변 경계로부터 가장 멀리 떨어진 곳을 찾는 거리 변환 이다. **거리 변환(dist.. 2023. 3. 29.
[OpenCV] 18. 허프 변환 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 허프 변환(Hough transform) 은 영상에서 직선과 원 같은 간단한 모양을 식별한다. 초기에는 직선을 찾는 방법으로 시작했다가 다양한 모양을 인식하게 확장하였다. 18.1 허프 선 변환 수많은 픽셀 속에서 직선 관계를 갖는 픽셀들만 골라내는 것이 허프 선 변환의 핵심이다. 각 점마다 여러 개의 가상의 선을 그어서 그 선들 중 평면 원점과 직각을 이루는 선을 찾아 각도와 거리를 구해서 모든 점에게 동일하게 나타나는 선을 찾아주면 된다. OpenCV는 이 선을 찾아주는 함수를 제공한다. lines = cv2.. 2023. 3. 29.
[OpenCV] 17. 컨투어 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 컨투어(contour)는 우리말로 등고선, 윤각선, 외곽선 등을 말한다. 영상에서는 같은 색상이나 밝기의 연속된 점을 찾아 잇는 곡선을 찾아내면 모양 분석과 객체 인식에 사용할 수 있다. contours, hierarchy = cv2.findContours(src, mode, method [, contours, hierarchy, offset])[-2:] src : 입력 이미지, 바이너리 스케일, 검은색 배경 흰색 전경 mode : 컨투어 제공 방식 선택 cv2.RETR_EXTERNAL : 가장 바깥쪽 라인만 제.. 2023. 3. 21.
[OpenCV] 16. 이미지 피라미드 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이미지 피라미드(Image pyramides) 는 영상의 크기를 단계적으로 축소 또는 확대해서 피라미드처럼 쌓아놓는 것을 말한다. 영상을 분석할 때 작은 이미지로 빠르게 확인하고 다음 단계 크기의 영상으로 분석하는 식으로 정확도를 높이는 것이 효율적이고, 영상의 크기에 따라 분석하는 내용이 다를 수 있다. 16.1 가우시안 피라미드 가우시안 필터를 적용한 후에 이미지 피라미드를 구현하는 것을 말한다. dst = cv2.pyrDown(src [, dst, dstsize, borderType]) dst = cv2.p.. 2023. 3. 21.
[OpenCV] 15. 모폴로지 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 모폴로지(morphology) 는 영상 분야에서 노이즈 제거, 구멍 메꾸기, 연결되지 않은 경계 이어붙이기 등 형태학적 관점에서의 영상 연산을 말한다. 주로 형태를 다루는 연산이므로 바이너리 이미지를 대상으로 한다. 대표적인 연산은 침식과 팽창이며, 이 둘을 결합한 열림과 닫힘 연산 등이 있다. 15.1 침식 연산 침식(erosion) 은 원래 있던 객체의 영역을 깍아내는 연산이다. 연산을 위해서는 구조화 요소(structuring element) 라는 0과 1로 채워진 커널이 필요한데, 1이 채워진 모양에 따라.. 2023. 3. 17.
[OpenCV] 14. 경계 검출 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 영상에서 경계(edge)를 검출하는 것은 배경과 전경을 분리하는 데 가장 기본적인 작업이다. 경계 검출은 객체 인식과 추적에서 아주 중요한 작업이다. 영상의 경계를 검출해서 경계에 있는 픽셀만을 골라서 강조하면 경계를 선명하게 만들 수 있다. 14.1 기본 미분 필터 경계를 검출하려면 픽셀 값의 변화가 갑자기 크게 일어나는 지점을 찾아내야 한다. 연속된 픽셀값에 미분 연산을 통해 알 수 있다. 1차 미분 연산의 x축과 y축 방향에 대한 기본적인 커널은 다음과 같다. $$ G_x = \begin{bmatrix} -.. 2023. 3. 14.
[OpenCV] 13. 컨볼루션과 블러링 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 컨볼루션(convolution) 연산은 공간 영역 필터의 핵심이라고 할 수 있다. 블러링 실습을 통해 컨볼루션 연산이 어떻게 동작하는지 알아보자. 13.1 필터와 컨볼루션 공간 영역 필터는 연산 대상 픽셀과 그 주변 픽셀 값을 활용하는데, 주변 픽셀들 중 어디까지를 포함할 것인지 그리고 결과값을 어떻게 산출할 것인지를 결정하는 것이 커널(kernel)이다. n x n 크기 커널의 각 요소와 대응하는 입력 픽셀값을 곱해서 모두 합한 것을 결과 픽셀값으로 결정하고, 이것을 마지막 픽셀까지 반복하는 것을 컨볼루션 연산.. 2023. 3. 13.
[OpenCV] 12. 렌즈 왜곡 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 행렬식으로 표현할 수 없는 모양의 변환도 필요할 때가 있다. 투명한 물잔을 통해 비친 장면이나 일렁이는 물결에 반사된 모습 같은 것이 대표적이다. 이런 렌즈 왜곡 변환에 대해서 알아보자. 12.1 리매핑 OpenCV는 규칙성 없이 마음대로 모양을 변환해 주는 함수로 cv2.remap()을 제공한다. 이 함수는 기존 픽셀의 위치를 원하는 위치로 재배치한다. dst = cv2.remap(src, mapx, mapy, interpolation [, dst, borderMode, borderValue]) src : 입력.. 2023. 3. 9.
[OpenCV] 11. 뒤틀기 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이동, 확대/축소, 회전은 변환 후에도 기존의 모양이 유지되지만, 뒤틀기(warping, 워핑)은 기존의 모양과 달라진다. 11.1 어핀 변환 어핀 변환(affine transform)은 이동, 확대/축소, 회전을 포함하는 변환으로 직선, 길이의 비율, 평행성을 보존하는 변환을 말한다. 변환 전과 후의 3개의 점을 짝 지어 매핑할 수 있다면 변환행렬을 거꾸로 계산할 수 있다. OpenCV는 아래 함수로 이 기능을 제공한다. matrix = cv2.getAffineTransform(pts1, pts2) pts1 :.. 2023. 3. 6.
[OpenCV] 10. 이동, 확대/축소, 회전 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 영상의 기하학적 변환은 기존의 영상을 원하는 모양이나 방향 등으로 변환하기 위해 각 픽셀을 새로운 위치로 옮기는 것이 작업의 대부분이다. 각 픽셀의 $x, y$ 좌표에 대해 옮기고자 하는 새로운 좌표 $x', y'$을 구하는 연산이 필요하다. 각 좌표에 대해 연산식을 적용해서 새로운 좌표를 구해야 하는데, 이때 사용할 연신삭을 가장 효과적으로 표현하는 방법이 행렬식이다. 변환행렬을 이용해서 영상 변환에 가장 흔하게 사용하는 이동, 확대/축소, 회전에 대해 알아보자. 10.1 이동 2차원 공간에서 물체를 다른 곳으.. 2023. 3. 3.