공부/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()