5회차.. 벌써 지침
합리화 하기 시작한다
▪ OpenCV 영상 데이터 자료형과 NumPy 자료형
OpenCV 자료형 ( 1채널 ) | NumPy 자료형 | 구분 |
cv2.CV_8U | numpy.uint8 | 8비트 부호 없는 정수 |
cv2.CV_8S | numpy.int8 | 8비트 부호 있는 정수 |
cv2.CV_16U | numpy.uint16 | 16비트 부호 없는 정수 |
cv2.CV_16S | numpy.int16 | 16비트 부호 있는 정수 |
cv2.CV_32S | numpy.int32 | 32비트 부호 있는 정수 |
cv2.CV_32F | numpy.float32 | 32비트 부동소수형 |
cv2.CV_64F | numpy.float64 | 64비트 부동소수형 |
cv2.CV_16F | numpy.float16 | 16비트 부동소수형 |
* floating point
• 그레이스케일 영상: cv2.CV_8UC1 → numpy.uint8, shape = (h, w)
• 컬러 영상: cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3)
import sys
import cv2
# 영상 불러오기
img1 = cv2.imread('niko_gray.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('niko.jpg', cv2.IMREAD_COLOR)
if img1 is None or img2 is None:
print("Image Load failed!")
sys.exit()
# 영상의 속성 참조
print('type(img1):', type(img1)) #numpy.ndarray
print('img1.shape:', img1.shape) #542, 542
print('img2.shape:', img2.shape) #542, 542, 3
print('img1.dtype:', img1.dtype) #uint8
print('img2.dtype:', img2.dtype) #uint8
if img1.ndim == 2:
print('img1 is a grayscale image')
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey()
# 영상의 크기 참조
h, w = img2.shape[:2]
print('img2 size: {} x {}'.format(w, h))
if len(img1.shape) == 2:
print('img1 is a grayscale image')
elif len(img1.shape) == 3:
print('img1 is a truecolor image')
if len(img2.shape) == 2:
print('img1 is a grayscale image')
elif len(img2.shape) == 3:
print('img1 is a truecolor image')
영상의 생성, 복사, 부분 영상 추출
numpy.empty(shape, dtype=float, ...) -> arr
numpy.zeros(shape, dtype=float, ...) -> arr
numpy.ones(shape, dtype=None, ...) -> arr
numpy.full(shape, fill_value, dtype=None, dtype=None, ...) -> arr
▪ 지정한 크기로 새 영상 생성하기
• shape: 각 차원의 크기 (h, w) 또는 (h, w, 3)
• dtype: 원소의 데이터 타입. 일반적인 영상이면 numpy.uint8 지정
• arr: 생성된 영상(numpy.ndarray)
• 참고사항:
▪ numpy.empty() 함수는 임의의 값으로 초기화된 배열을 생성
▪ numpy.zeros() 함수는 0으로 초기화된 배열을 생성
▪ numpy.ones() 함수는 1로 초기화된 배열을 생성
▪ numpy.full() 함수는 fill_value로 초기화된 배열을 생성
import numpy as np
import cv2
새 영상 생성하기
img1 = np.empty((240,320), dtype=np.uint8)
# 세로 240 x 가로 320 형식의 grayscale image 로 생성
# empty 함수를 사용하였기 때문에 모든 pixel 값은 쓰레기(버려지는) 값으로 채워지게 됨
img2 = np.zeros((240,320, 3), dtype=np.uint8)
# 세로 240 x 가로 320 형식의 color image 로 생성
# zeros 함수를 사용하였기 때문에 모든 pixel 값은 0으로 저장되서 black 으로 표현 됨
img3 = np.ones((240,320), dtype=np.uint8) * 255
# 1의 값이지만 각 BGR 을 255 를 곱하여 255로 만듦 (흰색)
# 세로 240 x 가로 320 형식의 color image 로 생성
# zeros 함수를 사용하였기 때문에 모든 pixel 값은 1으로 저장되서 black 으로 표현 됨
# zeros 와 ones 는 0과 1의 값으로 차이가 있지만 육안으로 확인하기 불가능하다
img4 = np.full((240,320), 128, dtype=np.uint8)
# 세로 240 x 가로 320 형식의 color image 로 생성
# full 함수를 사용하였기 때문에 모든 pixel 값을 128로 선정
img5 = np.full((240,320,3), (0, 255, 255), dtype=np.uint8)
# 세로 240 x 가로 320 형식의 color image 로 생성
#full 함수를 사용하였기 때문에 모든 pixel 값은 (0, 255, 255) 로 저장되서 노랑색으로 표현 됨
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)
cv2.imshow('img5', img5)
cv2.waitKey()
cv2.destroyAllWindows()
'etc > FastCampus 챌린지' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] 컴퓨터비전인강 100% 환급 챌린지 7 회차 (0) | 2020.10.25 |
---|---|
[패스트캠퍼스 수강 후기] 컴퓨터비전인강 100% 환급 챌린지 6 회차 (0) | 2020.10.24 |
[패스트캠퍼스 수강 후기] 컴퓨터비전인강 100% 환급 챌린지 4 회차 (0) | 2020.10.22 |
[패스트캠퍼스 수강 후기] 컴퓨터비전인강 100% 환급 챌린지 3 회차 (0) | 2020.10.21 |
[패스트캠퍼스 수강 후기] 컴퓨터비전인강 100% 환급 챌린지 2 회차 (0) | 2020.10.20 |