전체 글 30

ndarray 클래스 - 관심채널

관심 영역을 지정하는 방식은 관심영역을 설정하는 방식과 동일 ndarray 클래스 행렬에 블록 단위로 접근하는 방식 사용, 관심채널도 슬라이싱을 통해 설정 일반적으로 관심 채널로 설정된 배열은 새로운 ndarray 클래스에 할당 import numpy as np array = np.zeros((1280, 1290, 3), np.uint8) coi = array[:, :, 0] print(array.shape) print(coi.shape) (1280, 1290, 3) (1280, 1290) 관심채널은 이미지의 너비와 높이를 그대로 유지하고 특정 채널의 값만 불러옴 그러므로 ‘:, :’을 지정해 행과 열을 그대로 유지하고 마지막 차원에 어떤 채널을 가져올지 선택 차원의 수가 3차원에서 2차원으로 감소했지만..

영상처리/OpenCV 2022.06.07

ndarray 클래스 - 관심영역

Python OpenCV에서 관심 영역을 지정하는 방식은 ndarray 클래스의 행렬에 블록 단위로 접근하는 방식과 동일. 즉, 슬라이싱을 통해 원하는 영역의 범위를 설정하고 새로운 ndarray 클래스에 할당 import numpy as np array = np.zeros((1280, 1920, 3), np.uint8) x, y, w, h = 100, 100, 300, 300 roi = array[x:x+w, y:y+h] print(array.shape) print(roi.shape) (1280, 1920, 3) (300, 300, 3) 관심영역을 설정하는 방법은 슬라이싱(배열[start:end:step, start:end:step])과 동일 관심영역 설정시 주의사항 : end 가 너비 또는 높이가 아..

영상처리/OpenCV 2022.06.07

matrix 클래스

matrix 클래스 : 입력 배열을 행렬로 해석해서 사용하는 클래스, 행렬 연산 특화 2차원 배열 ndarray 클래스는 곱(*)과 제곱(**) 연산을 각 원소에 대해 수행. matrix 클래스는 곱(*)과 제곱(**)을 행렬 간의 연산으로 처리 import numpy as np array1 = np.array([1,2,3,4]).reshape(2,2) array2 = np.array([5,6,7,8]).reshape(2,2) mat1 = np.mat(array1) mat2 = np.mat(array2) print(mat1.T * mat2) print(mat1 ** 2) [[26 30] [38 44]] [[ 7 10] [15 22]] matrix 클래스는 행렬 연산에 특회된 클래스임. 공액 복소수 전치나..

영상처리/OpenCV 2022.06.07

배열 연산

파이썬 기본 내장 라이브러리 math 는 실수(real number)에 대해서만 연산을 지원 -> 컨테이너 자료형에 대해 연산이 불가하므로 반복문 등으로 배열 연산 수행 Numpy 배열은 범용 함수(universal functions)를 제공. 범용함수는 브로드캐스팅(broadcasting) 및 형식 캐스팅(type casting) 기능을 ndarray 클래스로 지원하며, 배열의 요소별 연산을 고속으로 수행하는 벡터화된 래퍼 함수(wrapper function) 임. 브로드캐스팅 : numpy 배열에서 차원의 크기가 서로 다른 배열에서도 산술 연산을 가능하게 하는 원리 -> 두 배열 간 차원의 크기가 (4, 2),(2, )일 때 산술 연산을 실행한다면 (2, )의 배열이 (4, 2) 행렬의 각 행에 대해..

영상처리/OpenCV 2022.06.07

배열 병합 및 분리

여러 배열을 병합한다면 새로운 축을 따라 배열을 연결하게 됨 배열을 병합할 때 입력 배열의 형태가 동일해야 함 즉, 페이지, 행, 열의 모든 모양이 같아야 함 stack() : 서로 다른 배열 병합 -> axis 매개 변수를 사용해 새로운 축을 설정 axis=0 : 첫번째 차원을 기준으로 삽입 axis=-1 : 마지막 번째 차원을 기준으로 삽입 축은 이어붙일 차원의 범위를 넘어갈 수 없음 import numpy as np array1 = np.arange(6).reshape(2,3) array2 = np.arange(6, 12).reshape(2,3) merge1 = np.stack([array1, array2], axis=0) merge2 = np.stack([array1, array2], axis=1..

영상처리/OpenCV 2022.06.07

배열 차원 변형

N차원으로 초기화된 배열의 데이터를 변경하지 않고 새로운 차원의 배열 생성 새로운 형태의 배열은 원본 배열의 모양과 호환돼야 함. -> 원래 데이터의 총 길이의 곱(개수)과 동일해야 함 import numpy as np array = np.arange(12) reshape1 = array.reshape(2,3,2) reshape2 = np.reshape(array, (2, -1), order='F') print(reshape1) print(reshape2) [[[ 0 1] [ 2 3] [ 4 5]] [[ 6 7] [ 8 9] [10 11]]] [[ 0 2 4 6 8 10] [ 1 3 5 7 9 11]] 배열의 차원 형태 변형 array.reshape(n, m, k, …, order=’C’ np.resha..

영상처리/OpenCV 2022.06.07

배열의 블록 단위 요소에 접근

단위 요소에 접근해야 할 시 불필요한 연산을 줄이기 위해서는 특정 행이나 열 또는 일정 범위의 하위 영역을 선택하여 접근. import numpy as np array = np.array([[[1,2], [3,4]], [[5,6], [7,8]]]) for i in array[0]: for j in i: if j % 2 == 0: print(j) 2 4 1차원 이상의 배열을 참조한 경우 반환 형식은 ndarray array[0]은 3차원 ndarray 클래스에서 첫 번째 페이지를 참조함 -> 2차원 배열이 저장되어 있으며 반복문을 통해 접근 for문은 배열의 열에 해당하는 요소에 접근하고 if를 통해 요소가 짝수인지 판별 import numpy as np array = np.array([[1,2,3,4,5..

영상처리/OpenCV 2022.06.07

배열의 개별 단위 요소에 접근 방법

파이썬의 리스트나 튜플의 자료형을 참조하는 방식과 동일 ndarray 클래스나 matrix 클래스는 변경이 가능한 Mutable 객체이므로 단순히 새로운 ndarray 변수에 객체를 덮어씌울 경우 원본을 참조 얕은복사(shallow copy, 복사본의 값을 바꿨을 때 원본의 값도 바뀌는 형태)가 이뤄 지므로 이런 구성은 지양 copy 매개변수처럼 깊은복사(deep copy, 복사본의 값을 바꿔도 원본의 값은 바뀌지 않는 형태)로 객체를 복사. -> 변형 전 후 이미지 비교시 얕은복사를 사용하면 전 이미지 사용불가 import numpy as np array1 = np.array([1,2,3]) array2 = np.array([[1,2],[3,4]]) array3 = np.array([[[1,2],[3,..

영상처리/OpenCV 2022.06.07

ndarray 클래스 - N차원 배열

ndarray class : 동일한 자료형을 가진 값들이 행렬 형태로 N차원 배열 생성 스스로 자료형을 유추하여 자동 할당 리스트나 튜플 또는 ndarray 클래스 등을 중첩하여 배열 생성 가능 np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0) object : 입력된 개체의 형태와 동일한 배열 구조로 Numpy 배열 정의 dtype : 배열의 자료형. 가령 object가 0과1로 구성된 배열일경우 값을 유추하여 int32형태 numpy 배열 생성. bool로 지정할 경우 True와 False 값으로 생성. copy : 객체를 복사하여 생성할지 선택. False로 지정하면 자료형이나 순서 등을 고려해서 객체를 복사할지 선택. ..

영상처리/OpenCV 2022.06.07

OpenCV 이론

이미지 크기 이미지를 구성하는 세가지 요소 : 크기, 정밀도, 채널 위 구성요소를 분리하는 채널 : 관심영역, 관심채널 -> opencv 함수를 사용할때 이미지 구성요소 중 하나 이상의 함수가 요구사항과 일치해야함 이미지 : 행렬(matrix) 형태로 구성 이미지의 크기 = 데이터의 크기 -> 고화질 이미지 = 과도한 연산 opencv에서 원본 이미지를 불러올 경우 에러 : 이미지 크기 속성값이 액자 역할을 함 액자 크기와 이미지 크기가 다르면 담을 수 없음 -> 원본 이미지 크기 변경 액자 : 변수/필드, 이미지 크기 재설정시 액자크기 또한 재설정 필요 -> 원본 이미지에서 45도 회전할 경우 각 모서리가 잘린 형태가 됨 = 이미지 누락 이미지크기와 액자의 크기는 별개의 속성. 자동으로 변환x 이미지크..

영상처리/OpenCV 2022.06.07