Language - Python(Opencv)
Python Opencv - #3 영상의 속성과 픽셀 값 참조
KimTory
2021. 11. 21. 14:02
▶ 영상 데이터의 표현 방식과 자료형
→ Opencv는 영상 데이터를 numpy.ndarray로 표현되며 4가지의 속성을 가지고 있다.
- ndim : 차원 수, len(image.shape)와 동일
- shape : 각 차원의 크기. (h,w) 또는 (h,w,3) 이며 너비 - 높이 - 채널 수를 뜻함
- size : Image 전체 원소 개수
- dtype :원소의 데이터 타입 즉, uint8과 같은 타입을 뜻함
위 내용을 정리하면, cv2.CV_8UC1는 shpae은 (h,w) 이고, 8UC3은 (h,w,3) 이다 (C1 - Gray Scale, C3 - Color)
영상의 속성 참조 확인 Code
import sys
import cv2
img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE) # grayscale
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR) # colorscale
if img1 is None or img2 is None:
print('Image load failed!')
sys.exit()
# 영상의 속성 참조
print('type(img1):', type(img1)) # numpy.ndarray
print('img1.dtype:', img1.dtype) # uint8
print('img1.shape:', img1.shape) # (480, 640)
print('img2.shape:', img2.shape) # (480, 640, 3)
# 영상의 크기 참조
h, w = img2.shape[:2]
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')
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()
# 영상의 픽셀 값 참조를 위함
# 실제 아래 for문 처럼 할 시, image processing lose time 발생
for y in range(h):
for x in range(w):
img1[y, x] = 255
img2[y, x] = (0, 0, 255)
# 슬라이싱 문법을 이용함
# [y:y~end, x:x~end] 이런식으로 이해하면 됨
# img1[:,:] = 255 # gray image, 1채널
# img2[:,:] = (0, 0, 255) # color image, 3채널
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()
cv2.destroyAllWindows()
▶ Opencv는 RGB가 아닌 BGR 순서임