OpenCV는 다양한 이미지 특징(feature) 처리 기능을 제공하는데 이 기능은 무료 라이선스가 아니다. 따라서 아니콘다나 pip 명령으로 내려받은 OpenCV 패키지에는 이 기능이 제외되어 있다. 이 기능까지 사용하고 싶은 개인 사용자는 OpenCV 소스코드를 내려받아 직접 컴파일을 해서 사용해야 한다. OpenCV를 컴파일하려면 GNU GCC C/C++ 컴파일러와 CMake 전처리기가 설치되어 있어야 하므로 윈도우나 맥은 빌드하기 까다롭다. 되도록 리눅스 운영체제나 도커를 사용하기를 권장한다. cjy8922/opencv_practice Contribute to cjy8922/opencv_practice development by creating an account on GitHub. github...
데이터 분석 & 시각화/OpenCV 검색 결과
이전 글에서 살펴본 매칭은 영상 전체를 바탕으로 비교하는 방법이기 때문에 비교할 영상이 비슷할 때만 좋은 결과가 나타난다. 즉, 물체의 변환이 있거나 회전이 있으면 좋은 결과를 얻을 수 없는 단점을 지닌다. pixel의 변화가 급격하게 일어나는 곳의 코너에 초점을 두어 영상 속의 여러 특징을 얻어내는 것이 필요하다. 1. Harris 코너 검출 Harris 코너 검출은 Sobel 필터로 edge를 찾아낸 다음, Gradiant 변화량을 측정해서 x축과 y축으로 동시에 급격하게 변화한 지점을 코너로 판단한다. import cv2 import numpy as np img = cv2.imread('weapon/search/vector.jpg') gray = cv2.cvtColor(img, cv2.COLOR_B..
서로 다른 두 이미지나 영상을 비교해서 비슷하거나 같은 객체를 포함하는 것을 찾는 영상 매칭을 시도하고자 한다. 영상 매칭은 영상에서 유의미하다고 판단되는 특징을 숫자로 변환해서 숫자를 비교하는 방법을 사용한다. 이를 찾아내는 것이 쉽지 않으며, 영상 속의 특징을 변환한 숫자를 특징 디스크립터(feature descriptor)라고 한다. 1. 평균 해시 매칭 * 배틀그라운드 무기 일부를 이미지로 활용합니다. 평균 해시란 어떠한 영상이든지 동일한 숫자로 변환되며 숫자를 얻기 위해서 평균 값을 이용하는 것이다. 평균을 얻기 전에 영상을 특정 크기로 지정하고 pixel 전체의 평균을 계산한 뒤 각 pixel이 평균보다 작으면 0, 크면 1로 바뀌게 한다. 그러면 pixel 값을 한 줄로 늘어선 2진수로 볼 ..
edge 탐지 글에서 언급한 것처럼, 객체 인식을 위해서는 배경과 전경을 분할하는 것이 필요하다. 영상 분할은 경계선이나 영역으로 분할하는데, 임계값(threshold)는 cv2.threshold()를 활용하면 된다. Hough 변환은 Computer Vision에서 사용하는 용어로, 선분 등의 추출을 위해 평면 상에 투영하는 것을 의미한다. 필터 처리 2 - 에지 탐지 에지 탐지란 배경과 전경을 분리하는 작업이며, 객체 인식을 위해서는 에지 탐지가 필수적이다. 이전 글에서 살펴본 블러링이 영상을 흐릿하게 했다면, 에지 탐지를 통해 경계에 있는 pixel만 골� dsbook.tistory.com 1. Canny Edge 검출 필터 처리 2 - 에지 탐지 글에서는 Sobel, 라플라시안 필터 등을 통해 검..
이미지를 흑백으로만 표현한 것을 이진화 이미지(binary image)라고 한다. 이미지에서 원하는 부분을 더욱 정확하게 판단하기 위해서 이를 활용하며, thresholding이라는 방법을 통해서 이진화 이미지를 만들 수 있다. Thresholding이란 입력된 자료군을 임계값과 비교하는 데이터 변환 기법으로, 합격/불합격 여부처럼 새롭게 입력된 자료군이 임계값보다 큰지 작은지에 따라 두 부류로 나누는 것을 의미한다. 1. 전역 thresholding Binary 이미지를 만들기 위해서는 Color 이미지를 Gray scale로 변환해서 각 pixel이 임계값을 넘으면 255(흰색), 그렇지 않으면 0(검은색)이 되도록 한다. 이러한 기능은 cv2.threshold()를 통해 구현한다. import cv..
모폴로지(morphology)란 한글로는 형태학을 의미하며, 일반적으로 생물의 구조나 외형을 연구하는 생물학의 한 분야를 뜻한다. NLP 분야에서의 모폴로지는 문맥에 따라 단어와 형태소에 관해 연구하는 것을, Computer Vision에서 모폴로지는 Noise를 제거하거나 영역 간 경계를 허물어뜨리는 형태학적인 연산을 수행하는 것을 의미한다. Computer Vision에서의 모폴로지를 위한 대표적인 연산 방법으로는 침식과 팽창이 있다. 1. 침식 연산 침식(erosion)은 기존에 있던 영역을 깎는 것이다. 침식 연산의 구조화 요소 커널이 해당 픽셀에 온전히 적용되지 않으면 그 픽셀을 없애버린다는 것이다. 행렬로 표현하면 다음과 같이 나타낼 수 있다. 구조화 요소 커널이 입력 영상의 pixel 내부에..
에지 탐지란 배경과 전경을 분리하는 작업이며, 객체 인식을 위해서는 에지 탐지가 필수적이다. 이전 글에서 살펴본 블러링이 영상을 흐릿하게 했다면, 에지 탐지를 통해 경계에 있는 pixel만 골라서 영상을 선명하게 하는 것을 Sharping(샤프닝)이라고 한다. 1. 기본 미분 필터 경계를 검출하기 위해서는 pixel 값이 급격하게 변하는 지점을 찾아야 하는데, 이는 미분 연산을 통해 찾을 수 있다. 그러나 pixel 값은 이산적인 데이터를 지니기 때문에 정확하게 미분 연산을 수행할 수 없다. 따라서, 근사화를 거쳐 계산이 이루어진다. 이를 컨볼루션 커널로 만들면 다음과 같다. 좌측은 세로 방향의 경계를, 우측은 가로 방향의 경계를 탐지한다. import cv2 import numpy as np img =..
0. 필터 처리 영상 처리에서는 필요한 값만 얻기 위한 필터가 사용된다. 필터를 활용하면 영상을 흐릿하게 하거나 선명하게 해서 edge(경계)를 검출하는 등 객체 인식도 할 수 있다. 영상 처리는 기존에 있던 pixel 값에 연산을 적용해서 새로운 pixel을 얻는 작업이다. 이 때, 연산을 수행할 pixel과 그 주변의 pixel을 활용하는 방법을 공간 영역 필터라고 한다. 공간 영역 필터에서 주변 pixel의 범위와 결과 산출을 위해 kernel이라는 n x n 행렬을 사용한다. 커널 행렬 값과 그에 대응하는 pixel 값을 곱해서 모두 합한 값이 결과 pixel값으로 출력되고, 이것을 처음부터 끝까지 반복한 것을 Convolution이라 한다. 커널의 값에 따라 블러링, 에지 탐지 등을 수행한다. ..
앞선 내용에서 영상의 이동, 회전 및 스케일링에 대해 다룬 적이 있다. 이미지 변환 - 이동, 회전, 스케일링 1. What is OpenCV? OpenCV란 Computer Vision을 위한 프로그래밍 라이브러리이며, TensorFlow나 PyTorch등의 Deep Learning Framework를 지원한다. 자바, 매트립 등 다양한 언어에서 개발환경을 지원하며, 여기서.. dsbook.tistory.com 위와 같은 경우는 이미지의 변환 후에도 기존 형태가 유지되지만, 이미지에 뒤틀기(Wariping) 변환을 주면 기존 형태와는 다르게 나타난다. 1. Affine Transform 아핀 변환(Affine Transform)이란 이동이나 회전 등을 포함하는 변환으로, 길이의 비율과 평행성이 보존되며..
이미지의 특정 영역을 지정하는 것에 대해 ROI(Region Of Interest)라고 한다. OpenCV가 Python언어에 대해서는 관심영역을 지정하도록 지원하는 별도의 API는 없지만, NumPy의 slicing을 통해서 이와 관련된 작업을 할 수 있다. img라는 이미지의 관심 영역의 시작 좌표가 (x, y)이고 해당 영역의 폭이 w, 높이가 h라고 하면 관심 영역을 지정하는 코드는 ROI = img[y:y+h, x:x+w] 와 같이 작성할 수 있다. 이는 img의 y행에서 y+h행까지, x열에서 x+w열까지 slicing한 것을 의미한다. 1. 좌표 지정 import cv2 import numpy as np img = cv2.imread('image.jpg') x = 350; y = 125 w ..
최근댓글