본문으로 바로가기

파이썬 OpenCV 이미지 생성/복사하기

category OpenCV 2020. 7. 13. 11:07
728x90

RGB

RGB 색 모형은 빛의 삼원색을 이용하여 색을 표현하는 방식이다. 빨강(RED), 초록(GREEN), 파랑(BLUE) 세 종류의 광원(光源)을 이용하여 색을 혼합하며 색을 섞을수록 밝아지기 때문에 '가산 혼합'이라고 한다. 디지털 이미지에서 사용되는 RGB 가산혼합의 종류로는 sRGB, 어도비 RGB 등이 있다.

 

Red : (255, 0, 0)

Green : (0, 255, 0)

Blue : (0, 0, 255)

 

테스트 해보세요 !

 

이미지 생성

Numpy 의 배열을 생성해주는 함수를 이용할 것입니다.

zeros() : 원소를 0로 배열을 생성

ones() : 원소를 1으로 배열을 생성 

import numpy as np 

zeros = np.zeros((240, 320), dtype=np.uint8)
print(zeros)
ones = np.ones((240, 320), dtype=np.uint8)
print(ones)
더보기
[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]
 
[[1 1 1 ... 1 1 1]
 [1 1 1 ... 1 1 1]
 [1 1 1 ... 1 1 1]
 ...
 [1 1 1 ... 1 1 1]
 [1 1 1 ... 1 1 1]

 

생선된 배열을 이용하여 이미지를 생성합니다.

모든 원소가 0이면 검정색이고, 모든 원소가 255이면 흰색입니다.

import numpy as np 
import cv2

gray_img = np.empty((240, 320), dtype=np.uint8)
gray_img2 = np.ones((240, 320), dtype=np.uint8) * 255
color_img = np.zeros((240, 320, 3), dtype=np.uint8)
color_img2 = np.ones((240, 320, 3), dtype=np.uint8) * 255

cv2.imshow('gray_img', gray_img) 
cv2.imshow('gray_img2', gray_img2) 
cv2.imshow('color_img', color_img) 
cv2.imshow('color_img2', color_img2) 

cv2.waitKey() 
cv2.destroyAllWindows()

 

Numpyfull() 함수를 이용하면 쉽게 배열을 생성할 수 있습니다.

사용방법은 다음과 같습니다.

import numpy as np 
import cv2

gray_img = np. full((480, 640), 255, dtype=np.uint8)
color_img = np.full((480, 640, 3), (0, 255, 255), dtype=np.uint8)

cv2.imshow('gray_img', gray_img) 
cv2.imshow('color_img', color_img) 

cv2.waitKey() 
cv2.destroyAllWindows()

 

이미지 복사

두 예제의 차이점을 보시겠습니다. (옅은복사, 깊은복사와 관련있습니다.)

 

배열을 대입하여 사용하니 다음과 같이 소스 이미지에 영향을 줍니다.

#1
import cv2

src = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
print(src.shape)

cp_img = src[100:200, 100:200]
cp_img.fill(0)
cv2.imshow('src', src) 
cv2.imshow('cp_img', cp_img) 

cv2.waitKey() 
cv2.destroyAllWindows()

 

copy() 함수를 사용하면 소스 이미지에 영향을 주지 않습니다.

#2
import cv2

src = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
print(src.shape)

cp_img2 = src[100:200, 100:200].copy()
cp_img2.fill(0)
cv2.imshow('src', src) 
cv2.imshow('cp_img2', cp_img2) 

cv2.waitKey() 
cv2.destroyAllWindows()