🙋♂️ 오늘은 영상의 속성과 픽셀 값 처리에 대해서 공부한 내용을 정리합니다!
✍ OpenCV는 영상데이터를 numpy.ndarray로 표현하며 사용할 수 있는 크게 4가지의 속성이 있습니다.
1. ndim: 차원 수로써 len(img.shpae)과 같으며 GrayScale의 경우 2를 Color의 경우 3을 반환합니다.
2. shape: 각 차원의 크기로써 (h,w) 또는 (h,w,3)로 반환하며 png의 경우에는 alpha 성분을 포함하여 (h,w,4)를 반환합니다.
3. size: 전체 원소의 갯수로써 (이미지를 구성하고 있는 pixel의 전체 개수라고 표현합니다.)
4. dtype: 원소의 데이터 타입으로써 일반적인 영상 데이터는 uint8이며 이미지에 따라 다를 수 있습니다.
✍ 아래의 코드는 예제코드로써 영상의 속성, 크기, 픽셀값에 대한 참조를 다루어보았습니다.
✅ 예제 코드
|
import sys
import cv2
# 영상 불러오기
img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
if img1 is None or img2 is None:
print('Image load failed!')
sys.exit()
# 영상의 속성 참조
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('img1.dtype:', img1.dtype)
# 결과: img1.dtype: uint8
# 영상의 크기 참조
h, w = img2.shape[:2]
# img.shape[:2]인 이유는 img2의 경우 color 이미지이기때문에 다른 표현으로는
# h, w, d = img2.shape이 존재한다.
print('img2 size: {} x {}'.format(w, h))
# 결과: img2 size: 640 x 480
if len(img1.shape) == 2:
print('img1 is a grayscale image')
elif len(img1.shape) == 3:
print('img1 is a truecolor image')
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()
# 영상의 픽셀 값 참조 (C, C++)
# 아래 코드의경우 C, C++와 같은 언어는 시간이 별로 걸리지 않지만 Python의 경우 인터프리터 언어로써
# 많은 시간이 소요 되므로 아래와 같이 진행하지 않는다.
for y in range(h):
for x in range(w):
img1[y, x] = 255
img2[y, x] = (0, 0, 255)
# 영상의 픽셀 값 참조 (Python)
img1[:,:] = 255
img2[:,:] = (0, 0, 255)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()
cv2.destroyAllWindows()
|
cs |
본 학습 내용은 "OpenCV를 활용한 컴퓨터비전과 딥러닝" 을 참고하였음을 알려드립니다.
'Python OpenCV' 카테고리의 다른 글
| 마스크 연산과 ROI (0) | 2024.01.26 |
|---|---|
| 영상의 생성, 복사, 부분 영상 추출 (0) | 2024.01.22 |
| 잡음 제거(Denoised) (0) | 2022.06.29 |
| 필터링(Filtering) (0) | 2022.06.25 |
| 모폴로지(Morphology) (0) | 2022.06.12 |