본문 바로가기
수업(국비지원)/Python

[Python] 이미지 형태 분석

by byeolsub 2023. 4. 27.

📌

import cv2

# 이미지 형태 분석
def print_matInfo(name, image) :
    #image : 이미지를 읽은 배열값.(이미지 데이터 값.)
    # image.dtype : 배열요소의 자료형. 
    if image.dtype == 'uint8' : mat_type = "CV_8U" # 부호가 없는 8비트(0~225). 기본적인 지정방식.
    elif image.dtype == 'int8' : mat_type = "CV_8S" # 부호가 있는 8비트(-128~127). 자바에서는 byte타입
    elif image.dtype == 'uint16' : mat_type = "CV_16U" # 부호가 없는 16비트
    elif image.dtype == 'int16' : mat_type = "CV_16S" # 부호가 있는 16비트
    elif image.dtype == 'float32' : mat_type = "CV_32F" # 부호가 있는 32비트 실수형
    elif image.dtype == 'float64' : mat_type = "CV_64F" # 부호가 있는 64비트 실수형
   # image.ndim : 배열의 차수.(1차원인지 2차원인지 3차원인지)
   # 1 차원이면 흑백, 3차원이면 컬러
    nchannel = 3 if image.ndim == 3 else 1 
    print("%12s: dtype(%s), channels(%s) -> mat_type(%sC%d)"
          % (name, image.dtype, nchannel, mat_type, nchannel))
    
# imread : 이미지 파일을 배열로 읽어낸다.(이미지 파일을 숫자로 저장하여 읽는다.)    
gray2gray = cv2.imread("images/read_gray.jpg", cv2.IMREAD_GRAYSCALE)
gray2color = cv2.imread("images/read_gray.jpg", cv2.IMREAD_COLOR)
gray2colora = cv2.imread("images/read_gray.jpg", cv2.IMREAD_UNCHANGED)
color2gray = cv2.imread("images/read_color.jpg", cv2.IMREAD_GRAYSCALE)
color2color = cv2.imread("images/read_color.jpg", cv2.IMREAD_COLOR)
color2colora = cv2.imread("images/read_color.jpg", cv2.IMREAD_UNCHANGED)

print_matInfo("gray2gray", gray2gray)
print_matInfo("gray2color", gray2color)
print_matInfo("gray2colora", gray2colora)
print_matInfo("color2gray", color2gray)
print_matInfo("color2color", color2color)
print_matInfo("color2colora", color2colora)

# 
color1 = cv2.imread("images/read_16.tif", cv2.IMREAD_UNCHANGED)
color2 = cv2.imread("images/read_32.tif", cv2.IMREAD_UNCHANGED)
color1.shape # (300, 400, 3)
color2.shape # (300, 400, 3)

color1[10,10]
color2[10,10]

cv2.imshow("read_16.tif", color1)
cv2.imshow("read_32.tif", color2)

print_matInfo("color1", color1)
print_matInfo("color2", color2)

# 사진의 밝기 조정
image = cv2.imread("images/read_gray.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow("origimal image", image)

# openCv함수를 이용하여 사진의 밝기 조정
dst1 = cv2.add(image,100)
dst2 = cv2.subtract(image,100)
cv2.imshow("dst1 image", dst1)
cv2.imshow("dst2 image", dst2)

# numpy 배열을 이용하여 사진의 밝기 조정
dst3 = image + 100 # image 배열의 값 +100
dst4 = image - 100 # image 배열의 값 -100

cv2.imshow("dst3 image", dst3)
cv2.imshow("dst4 image", dst4)