잠토의 잠망경

[OpenCV] 사진 읽고 쓰기 본문

공부/Python

[OpenCV] 사진 읽고 쓰기

잠수함토끼 2019. 1. 1. 09:32

사진 화면에 보이기

임의의 사진을 화면에 띄우기

import cv2

imageFile='./file.jpg'

img1_style = cv2.imread(imageFile, cv2.IMREAD_COLOR) # normal
img2_style = cv2.imread(imageFile,cv2.IMREAD_GRAYSCALE) # Gray

cv2.imshow('normal', img1_style)
cv2.imshow('gray', img2_style)

cv2.waitKey()
cv2.destoryAllWindows()

참고

Imread flag

flag Discription
cv2.IMREAD_COLOR color, Default, 투명 무시
cv2.IMREAD_GRAYSCALE Gray로 읽음
cv2.IMREAD_UNCHANGED alpha Channel 포함

Image 저장(Extension)

저장방법

포맷 flag 범주 내용
PNG cv2.IMWRITE_PNG_COMPRESSION 0~9 압축율, 숫자가 크면 높은 압축, 시간 오래 걸림
JPEG cv2.IMWRITE_JPEG_QUALITY 0~100 품질, 높을 수록 품질 좋음
import cv2

imageFile = 'image.jpg'

img1_style = cv2.imread(imageFile)

cv2.imwrite('image.bmp', img1_style)
cv2.imwrite('image.png', img1_style)
cv2.imwrite('image.png', img1_style, [cv2.IMWRITE_PNG_COMPRESSION, 9]) #0 ~9, 압축율
cv2.imwrite('image.jpg', img1_style, [cv2.IMWRITE_JPEG_QUALITY, 10]) #0~100 품질

matplotlib에 사진 띄우기

Image 보여주는 방식

item 형식
opencv BGR
Matplotlib RGB

BGR 방식

import cv2

imageFile = 'image.jpg'

image1_style = cv2.imread(imageFile)

from matplotlib imprt pyplot as plt

plt.axis('off')
#plt.xticks([]) 위에와 같음
#plt.yticks([])

plt.imshow(image1_style)
plt.show()

BGR To RGB 변환

opencv 는 BGR방식으로 인하여 RGB로 변경해야 matplotlib에 정상적으로 표현된다.

RGB 방식 변경

import cv2

imageFile = 'image.jpg'

image1_style = cv2.imread(imageFile)

B, G, R = cv2.split(image1_style)
img2_style = cv2.merge([B,G,R])

# img2_style = cv2.cvtColor(img2_style, cv2.COLOR_BGR2RGB) 
# 위에 내용과 동일한 CODE이다.

from matplotlib imprt pyplot as plt

plt.axis('off')
#plt.xticks([]) 위에와 같음
#plt.yticks([])

plt.imshow(image2_style)
plt.show()

여러 이미지 격자로 생성하기(matplotlib)

matplotlib를 활용하여 구현할 수 있다.

import cv2
from matplotlib import pyplot as plt

imgList=[]

for i in list(range(1,5)):
    tempImage = cv2.imread('{}.jpg'.format(i))
    imgList.append(cv2.cvtColor(tempImage, cv2.COLOR_BGR2RGB))

fig, ax = plt.subplots(2,2, figsize(10,10), sharey=True)

fig.canvas.set_window_title('sample picture')

for i in list(range(2)):
    for j in list(range(2)):
        ax[i][j].axis('off')
        a[i][j].imshow(imgList[2*i+j], aspect='auto')

plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wsapce=0.05, hspace=0.05)

plt.savefig('000.png', bbox_inches='tight')
plt.show()
Comments