본문 바로가기

Python OpenCV

영상의 속성과 픽셀 값 처리

🙋‍♂️ 오늘은 영상의 속성과 픽셀 값 처리에 대해서 공부한 내용을 정리합니다!

 

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: (480640)
 
print('img2.shape:', img2.shape)
# 결과: img2.shape: (4806403)
 
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] = (00255)
  
# 영상의 픽셀 값 참조 (Python)
img1[:,:] = 255
img2[:,:] = (00255)
 
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