ホームページ  >  記事  >  バックエンド開発  >  Python は画像を読み取って表示する 2 つのメソッドを実装します

Python は画像を読み取って表示する 2 つのメソッドを実装します

高洛峰
高洛峰オリジナル
2017-01-14 13:26:552812ブラウズ

Pythonでopencvを使用することに加えて、matplotlibやPILを使用して画像を操作することもできます。私は matpoltlib の構文が matlab に似ているため、matpoltlib を好みます。

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()

2. 特定のチャンネルを表示します

3. matplotlib には、RGB 画像をグレースケールに変換する適切な関数がありません。チャートは、次の式に従ってカスタマイズできます:

# 显示图片的第一个通道
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()

4. 画像を拡大縮小します

ここでは Scipy を使用します

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()

5. 画像を保存します

5.1 matplotlib で描画した画像を保存します

この方法は保存に適しています。 matplotlib によって描画されるイメージはすべて、スクリーンキャプチャに相当します。

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

5.2 配列を画像として保存する

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

5.3 配列を直接保存する

読み取り後も、配列を表示する以前の方法に従って画像を表示できます。この方法では、画質が損なわれることはありません。

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

2. PIL

1. 画像を表示

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

2. PIL Image の画像を numpy 配列に変換

Image クラスの save メソッドを直接呼び出します

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

4.配列を PIL 画像に変換します

ここで、画像配列を読み取るために matplotlib.image が使用されます。ここで読み取られる配列は、範囲が 0 ~ 1 の float32 型であるのに対し、PIL.Image データは uinit8 型であることに注意してください。 0 ~ 255 の範囲なので、変換が必要です:

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

5. RGB をグレースケール画像に変換する

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

以上がこの記事の全内容です。また、皆様の学習に役立つことを願っています。 PHP 中国語 Web サイトにもっと注意を払うつもりです。

Python で画像を読み取って表示する 2 つの方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。