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
반응형
'OpenCV' 카테고리의 다른 글
| OpenCV 마스크 연산& ROI (0) | 2024.03.15 |
|---|---|
| OpenCV 이미지(영상)의 생성, 복사, 부분 영상 추출 (1) | 2024.03.15 |
| OpenCV 슬라이드쇼 만들기 (0) | 2024.03.14 |
| OpenCV Matplotlib 사용하여 이미지(영상) 출력 (0) | 2024.03.14 |
| OpenCV 이미지 파일 불러와서 출력하기 (0) | 2024.03.14 |