GO THE DISTANCE!

네 번째 - OpenCV 기초 - 영상의 속성, 픽셀 값 참조 - 국비지원무료교육

by makeany

1. OpenCV 는 영상 데이터를 numpy.ndarray 로 표현

import cv2

img1 = cv2.imread('blackpink.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('blackpink.jpg', cv2.IMREAD_COLOR)

numpy.ndarray

  • ndim 차원 수 . len img.shape 과 같음
  • shape: 각 차원의 크기 . (h, w) -> 그레이 스케일 영상 또는 (h, w, 3) -> 컬러 영상
    세로(높이)가 먼저고 가로(너비)가 그 다음이다. 
    컬러 영상은 3, png에서 알파채널이 하나 추가 되면 4, 그레이 스케일은 당연 2 이다.
  • size: 전체 원소 개수
  • dtype 원소의 데이터 타입 . 영상 데이터는 uint8

2. 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비트 부동소수형
  • 그레이스케일 영상 : cv2.CV_8UC1 -> numpy.uint8, shape = (h, w)
  • 컬러 영상 : cv2.CV_8UC3 -> numpy.uint8, shape = (h, w, 3)

3. 영상의 속성 참조 예제

img1 = cv2.imread( imread('cat. cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread( imread('cat. cv2.IMREAD_COLOR)

print('type(img1):', type(img1)) # type(img1): <class 'numpy.ndarray'>
print('img1.shape:', img1.shape) # img1.shape: (480, 640)
print('img2.shape:', img2.shape) # img2.shape: (480, 640, 3)
print('img2.dtype:', img2.dtype) # img2.dtype: uint8

h, w = img2.shape[:2] # h: 480, w: 640
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')

4. 영상의 픽셀 값 참조 예제

img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)

# for문으로 픽셀 값을 변경하는 작업은 매우 느리므로, 픽셀 값 참조 방법만 확인하고 실제로는 사용 금지
for y in range (h):
	for x in range (w):
		img1[y, x] = 255
		img2[y, x] = [0, 0, 255]


# img1[:,:] 255
# img2[:,:] ==(0, 0, 255)

 

영상의 생성, 복사, 부분 영상 추출

1. 지정한 크기로 새 영상 생성하기

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, ......) --> 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 로 초기화된 배열을 생성


2. 영상의 생성 예제 코드

img1 = np.empty((480, 640), dtype = np.unit8) # grayscale image

img2 = np.zeros((480, 640, 3), dtype =np.uint8) # color image

img3 = np.ones ((480, 640), dtype =np.unit8) * 255 # white

img4 = np.full ((480, 640, 3), (0, 255, 255), dtype =np.unit8) # yellow



3. 영상의 참조 및 복사 예제 코드

img1 = cv2.imread('HappyFish.jpg')
img2 = img1
img3 = img1.copy()

 

4. 영상의 참조 및 복사 예제 코드

img1 = cv2.imread('HappyFish.jpg')
img2 = img1
img3 = img1.copy()

img1.fill(255)

 

5. 부분 영상 추출

img1 = cv2.imread('HappyFish.jpg')


img2 = img1[40:120, 30:150] # numpy.ndarray의 슬라이싱
img3 = img1[40:120, 30:150].copy()

img2.fill(0)

 


스마트인재개발원 홈페이지 주소는? 바로 여기!!!

 

스마트인재개발원

4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관

www.smhrd.or.kr

 

 

블로그의 정보

막만들자!

makeany

활동하기