본문 바로가기

OpenCV

(14)
기하학적 변환 (1) 1. 이동(Translation)■ 기존 좌표를 \( x_{\text{old}}, y_{\text{old}} \)라고 했을 때, 이미지를 이동하는 방법은 기존 좌표에 이동시키려는 거리 \( d_1, d_2 \)를 더해주면 된다. \[ \begin{cases} x_{\text{new}} = x_{\text{old}} + d_1 \\ y_{\text{new}} = y_{\text{old}} + d_2 \end{cases} \Leftrightarrow \begin{cases} x_{\text{new}} = 1x_{\text{old}} + 0y_{\text{old}} + d_1 \\ y_{\text{new}} = 0x_{\text{old}} + 1y_{\text{old}} + d_2 \end{cases} \] ..
이미지 프로세싱 (3) 1. 1D 히스토그램■ 1차원 히스토그램은 도수 분포표를 그래프로 나타낸 것이다.■ 전체 영상/이미지의 픽셀 값 중 픽셀 값 1이 몇 개인지, 2가 몇 개인지, ... , 255가 몇 개인지 히스토그램으로 나타내면 전체 영상/이미지에서 픽셀들의 색상이나 명암의 분포를 파악할 수 있다. ■ OpenCV에서는 cv2.calHist(img, channel, mask, histSize, ranges) 함수로 영상/이미지에 대한 히스토그램을 생성할 수 있다. - img는 영상/이미지로  리스트([img])로 값을 전달해야 한다. - channel은 분석할 채널이며 리스트로 값을 전달해야 한다. 예를 들어 BGRA에서 Blue 채널을 분석하고 싶으면 Blue 채널의 인덱스는 0이므로 [0]을 전달하면 된다. - m..
이미지 프로세싱 (2) 1. 이미지 연산■ OpenCV에서 한 픽셀이 가질 수 있는 값의 범위는 0~255이므로 이미지 연산 결과, 값이 0보다 작거나 255보다 큰 경우 값을 0~255 범위 내로 제한해야 한다.■ OpenCV에서는 값의 범위를 제한해 주는 사칙 연산 함수를 제공하며, 해당 함수들은 결괏값을 0보다 작은 값은 0으로, 255보다 큰 값은 255로 처리해서 0~255로 값의 범위를 제한하고 정숫값만 사용한다.■ OpenCV 사칙 연산 함수는 다음과 같다.(1) cv2.add(src1, src2, dest, mask, dtype)- 입력으로 들어오는 두 배열 혹은 배열과 스칼라의 각 원소 간 합을 계산한다.- scr1과 src2는 첫 번째 입력 이미지, 두 번째 입력 이미지이며,- dest는 계산된 결과의 출력 ..
이미지 프로세싱 (1) 1. 관심 영역(Region Of Interest, ROI)■ 관심 영역(ROI)은 이미지에서 분석 대상으로 지정한 특정 부분을 의미한다. 전체 이미지를 처리하는 대신 관심 있는 부분만 잘라내 처리함으로써 연산 효율성을 높일 수 있다. ■ cv2.imread( )로 이미지를 읽으면 이미지 데이터를 넘파이 배열로 반환하기 때문에 슬라이싱을 이용하여 관심 영역만 잘라낼 수 있다. img[y:y+h, x:x+w] y, x는 관심 영역 시작점, h, w는 영역의 폭 ■ img[y:y+h, x:x+w], 이렇게 데이터의 양을 줄이면 이미지 형태가 단순화되어 알고리즘 적용과 좌표 계산이 용이해진다.import cv2from matplotlib import pyplot as pltimg = cv2.imread('i..
NumPy와 Matplotlib 1. Numpy1.1 넘파이 배열 생성 ■ 넘파이 배열 생성 방법은 크게 (1) 값으로 생성 - array( ), (2) 크기와 초깃값으로 생성 - empty( ), zeros( ), ones( ), full( ) , (3) 기존 배열을 기준으로 생성 - empty_like( ), zeros_like( ), ones_like( ), full_like( ), (4) 순차적인 값으로 생성 - arrange( ), (5) 난수로 생성 - random.rand( ), random.randn( ) 이 있다.■ 먼저, array( )로 넘파이 배열을 생성할 경우 다음과 같이 리스트를 사용해서 만들 수 있다. 이 리스트를 이용해서 배열의 차원을 설정할 수 있다.import numpy as npa = np.array(..
기본 입출력 1. 이미지 읽기■ OpenCV에서는 imread( ) 함수로 이미지를 BGR 형태로 읽 수 있다.import cv2img = cv2.imread('img1.jpg')■ imread( )의 첫 번째 인수는 읽어올 이미지 파일의 경로이다. 이때, 파일 경로는 절대 경로와 상대 경로 모두 사용 가능하다. ■ imread( )의 두 번째 인수에는 (1) 이미지 파일을 컬러 이미지로 읽을 건지, (2) 그레이 스케일로 읽을 건지, (3) alpha channel(투명도)까지 포함하여 읽을 건지 flag를 지정한다.(1) cv2.IMREAD_COLOR- 두 번째 인수의 디폴트 값은 cv.IMREAD_COLOR로 이미지 파일을 컬러 이미지로 읽어 들인다. 이때, 투명한 부분은 무시된다- 두 번째 인수에 cv.IMR..