본문 바로가기
OpenCV

OpenCV 이미지 속성, 크기, 픽셀 값 참조

by Kwonys 2024. 3. 15.
728x90
반응형
  • OpenCV는 영상(이미지) 데이터를 numpy.ndarray로 표현

• 그레이스케일 영상(이미지): cv2.CV_8UC1 → numpy.uint8, shape = (h, w)

• 컬러 영상(이미지): cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3)

import sys
import cv2
import os
os.chdir('C:\coding\OpenCV\ch01') # can't open/read file: check file path/integrity 오류 해결을 위해 경로 설정


# 이미지 불러오기
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))    # numpy.ndarray
print('img1.shape:', img1.shape)    # (480,640)
print('img2.shape:', img2.shape)    # (480,640,3)
print('img1.dtype:', img1.dtype)    # unit8

h, w = img1.shape
print(f'w x h = {w} x {h}')

h, w = img2.shape[:2]
print(f'w x h = {w} x {h}')

if img1.ndim == 2:  # = len(img1.shape)
    print('img1 is a grayscale image')

# 이미지의 크기 참조
h, w = img1.shape   # GRAYSCALE
print(f'w x h = {w} x {h}')

h, w = img2.shape[:2]   # COLOR
print(f'img2 size: {w} x {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 y in range(h):
    for x in range(w):
        img1[y, x] = 255            # 모든 픽셀을 검은 색으로
        img2[y, x] = (0, 0, 255)    # 모든 픽셀을 파란색으로

# img1[:,:] = 255           # 모든 픽셀을 검은 색으로
# img2[:,:] = (0, 0, 255)   # 모든 픽셀을 파란색으로

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

cv2.destroyAllWindows()


x = 20
y = 10
p1 = img1[y,x]
p2 = img2[y,x]  # RGB

위처럼 for문으로 픽셀 값을 변경하는 작업은 매우 느리므로,

픽셀 값 참조 방법만 확인하고 실제로는 사용하지 않는 것을 추천한다.

728x90
반응형