코딩. 캠핑

OpenCV Python 입문(5) - 영상 생성, 복사, 부분 추출 본문

Dev(개발)/OpenCV(Python)

OpenCV Python 입문(5) - 영상 생성, 복사, 부분 추출

진영_8 2021. 1. 28. 17:18

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

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

이제 실습을 해봅시다.

import numpy as np
import cv2

# 새 영상 생성하기
img1 = np.empty((240, 320), dtype=np.uint8)       # 그레이 스케일
img2 = np.zeros((240, 320, 3), dtype=np.uint8)    # 트루 컬러
img3 = np.ones((240, 320, 3), dtype=np.uint8)     # 트루 컬러
img4 = np.full((240, 320), 128, dtype=np.uint8)   # 그레이 스케일

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)
cv2.waitKey()
cv2.destroyAllWindows()

img2와 img3은 밝기 값이 단 1 차이기 때문에 육안으로는 보기 힘들다. 하지만 아래와 같이 하게되면 흰색으로 나온다.

img3 = np.ones((240, 320, 3), dtype=np.uint8) *255     # 트루 컬러

영상 복사하기

# 영상 복사
img1 = cv2.imread('HappyFish.jpg')

img2 = img1
img3 = img1.copy()

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

 

복사가 잘 된다.

img2 = img1
img3 = img1.copy()

이제 여기서 요 두개의 차이점이 뭔지를 보자.

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

imshow 전 줄에 요 줄을 추가해주고 다시 실행해보면 아래처럼 된다.

???

im2 = img1은 참조와 같은 개념이고,
img1.copy()는 복사본을 아예 새롭게 생성하는 것이다.
그렇기 때문에 img1에서 어떤 처리를 하던 원본영상이 보이게 되는 것이다.


부분 영상 추출

# 부분 영상 추출
img1 = cv2.imread('HappyFish.jpg')

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

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

잘 잘렸다.

 

Comments