OpenCV

[OpenCV_01_02_그레이스케일]

선호하는 2022. 12. 7. 21:00
import cv2

img_path = "./imgs/IU.png"
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) #그레이 스케일로 읽기
if img is not None:
    cv2.imshow('IMG', img) # 이미지 표시
    cv2.waitKey() # 키 입력 대기
    cv2.destroyWindow() # 창 닫기
else:
    print('No Image File.')

 

IMREAD_GRAYSCALE -  1채널로 이미지를 읽어온다.(1채널 = 2^8 = 256가지의 흑백 톤으로 불러오기)

IMREAD_UNCHANGED - 원본 그대로 불러옴

IMREAD_COLOR - 3채널 RGB 이미지 사용(1채널^3  = 256^3가지의 RGB 색상 톤으로 불러옴)

IMREAD_REDUCED_COLOR_[2, 4, 8] - 3채널 이미지, [1/2, 1/4, 1/8] 크기

IMREAD_REDUCED_GRAYSCALE_[2, 4, 8] - 1채널 이미지, [1/2, 1/4, 1/8] 크기

import cv2
import numpy as np
import matplotlib.pyplot as plt

IMREAD_ANYCOLOR = cv2.imread('./imgs/IU.png', cv2.IMREAD_ANYCOLOR)
IMREAD_ANYDEPTH = cv2.imread('./imgs/IU.png', cv2.IMREAD_ANYDEPTH)
IMREAD_COLOR = cv2.imread('./imgs/IU.png', cv2.IMREAD_COLOR)
IMREAD_GRAYSCALE = cv2.imread('./imgs/IU.png', cv2.IMREAD_GRAYSCALE)
IMREAD_REDUCED_COLOR_2 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_COLOR_2)
IMREAD_REDUCED_COLOR_4 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_COLOR_4)
IMREAD_REDUCED_COLOR_8 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_COLOR_8)
IMREAD_REDUCED_GRAYSCALE_2 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_GRAYSCALE_2)
IMREAD_REDUCED_GRAYSCALE_4 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_GRAYSCALE_4)
IMREAD_REDUCED_GRAYSCALE_8 = cv2.imread('./imgs/IU.png', cv2.IMREAD_REDUCED_GRAYSCALE_8)
IMREAD_UNCHANGED = cv2.imread('./imgs/IU.png', cv2.IMREAD_UNCHANGED)

imgs = {'IMREAD_ANYCOLOR':IMREAD_ANYCOLOR, 
        'IMREAD_ANYDEPTH':IMREAD_ANYDEPTH, 
        'IMREAD_COLOR':IMREAD_COLOR, 
       'IMREAD_GRAYSCALE':IMREAD_GRAYSCALE,
       'IMREAD_REDUCED_COLOR_2':IMREAD_REDUCED_COLOR_2,
       'IMREAD_REDUCED_COLOR_4':IMREAD_REDUCED_COLOR_4,
       'IMREAD_REDUCED_COLOR_8':IMREAD_REDUCED_COLOR_8,
       'IMREAD_REDUCED_GRAYSCALE_2':IMREAD_REDUCED_GRAYSCALE_2,
       'IMREAD_REDUCED_GRAYSCALE_4':IMREAD_REDUCED_GRAYSCALE_4,
       'IMREAD_REDUCED_GRAYSCALE_8':IMREAD_REDUCED_GRAYSCALE_8,
       'IMREAD_UNCHANGED':IMREAD_UNCHANGED}

for i, (k, v) in enumerate(imgs.items()):
    plt.subplot(5, 3, i+1)
    plt.title(k)
    plt.imshow(v)
    plt.xticks([])
    plt.yticks([])

plt.show()

 

gray와 color의 차이만 뚜렷해 보이고 같은 계열끼리는 비슷한 느낌이다.

그런데 원래 색상이 저게 아닌데...

plt로 보여주는 과정에서 뭔가 역변한듯

 

추가

imread를 통해서 읽어오는 이미지는 BRG형태이기 때문에 보통 인식하는 RGB형태로 변환해야 색상이 이상해지지 않는다. cv.cvtColor(변환할 이미지, cv2.COLOR_BGR2RGB)를 통해 변환할 수 있다.