>  기사  >  백엔드 개발  >  Python은 이미지를 읽고 표시하는 두 가지 방법을 구현합니다.

Python은 이미지를 읽고 표시하는 두 가지 방법을 구현합니다.

高洛峰
高洛峰원래의
2017-01-14 13:26:552812검색

Python에서 opencv를 사용하는 것 외에도 matplotlib 및 PIL을 사용하여 이미지를 조작할 수도 있습니다. 저는 matpoltlib의 구문이 matlab과 비슷하기 때문에 선호합니다.

1. matplotlib

1. 이미지 표시

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
 
lena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape #(512, 512, 3)
 
plt.imshow(lena) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()


채널 표시

# 显示图片的第一个通道
lena_1 = lena[:,:,0]
plt.imshow('lena_1')
plt.show()
# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法:
plt.imshow('lena_1', cmap='Greys_r')
plt.show()
 
img = plt.imshow('lena_1')
img.set_cmap('gray') # 'hot' 是热量图
plt.show()

3. RGB를 회색조 이미지로

matplotlib에는 RGB 이미지를 회색조 이미지로 변환하는 데 적합한 함수가 없습니다.

def rgb2gray(rgb):
  return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
 
gray = rgb2gray(lena) 
# 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray'))
plt.imshow(gray, cmap='Greys_r')
plt.axis('off')
plt.show()

4. 이미지 크기를 조정하세요. 🎜>Scipy는 여기에서 사용됩니다

from scipy import misc
lena_new_sz = misc.imresize(lena, 0.5) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸
plt.imshow(lena_new_sz)
plt.axis('off')
plt.show()

5. 이미지 저장

5.1 matplotlib로 그린 이미지 저장

이 방법은 그려진 모든 matplotlib를 저장하는 데 적합합니다. 이미지는 동일합니다. 화면 캡처로.

plt.imshow(lena_new_sz)
plt.axis('off')
plt.savefig('lena_new_sz.png')

5.2 배열을 이미지로 저장

from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)

5.3 배열을 직접 저장

읽은 후에도 이전 배열 표시 방법에 따라 이미지를 표시할 수 있습니다. 이미지 품질 손실이 전혀 없습니다

np.save('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上.npy
img = np.load('lena_new_sz.npy') # 读取前面保存的数组

2. PIL

1. 이미지를 표시합니다

from PIL import Image
im = Image.open('lena.png')
im.show()

2. PIL 이미지 이미지를 numpy 배열로 변환합니다

im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

3. PIL 이미지 저장

이미지 클래스의 save 메소드를 직접 호출

from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')

4. numpy 배열을 PIL 이미지로 변환

여기서 matplotlib .image는 이미지 배열을 읽는 데 사용됩니다. 여기서 읽은 배열은 float32 유형이고 범위는 0-1인 반면 PIL.Image 데이터는 uinit8 유형이고 범위는 0-255이므로 변환이 필요합니다. :

import matplotlib.image as mpimg
from PIL import Image
lena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1
im = Image.fromarray(np.uinit8(lena*255))
im.show()

5. RGB 변환 그레이스케일 이미지입니다

from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()

위 내용은 모두의 학습에 도움이 되기를 바랍니다. PHP 중국어 웹사이트에 가입하겠습니다.

파이썬에서 이미지를 읽고 표시하는 두 가지 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.