Heim  >  Artikel  >  Backend-Entwicklung  >  Python implementiert zwei Methoden zum Lesen und Anzeigen von Bildern

Python implementiert zwei Methoden zum Lesen und Anzeigen von Bildern

高洛峰
高洛峰Original
2017-01-14 13:26:552812Durchsuche

Zusätzlich zur Verwendung von opencv in Python können Sie auch Matplotlib und PIL zum Bearbeiten von Bildern verwenden. Ich bevorzuge Matpoltlib, weil seine Syntax eher Matlab ähnelt.

1. matplotlib

1. Bilder anzeigen

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. Einen Kanal anzeigen

3. RGB in Graustufenbild konvertieren

# 显示图片的第一个通道
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()
Es gibt keine geeignete Funktion in matplotlib, um ein RGB-Bild in ein Graustufenbild umzuwandeln. Sie können eine nach der Formel anpassen:

4 das Bild

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()
Hier wird Scipy verwendet

5. Speichern Sie das Bild

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

Diese Methode ist geeignet zum Speichern aller von matplotlib gezeichneten Bilder, äquivalent zu einer Bildschirmaufnahme.

5.2 Array als Bild speichern

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

5.3 Array direkt speichern

from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)
Nach dem Lesen können Sie das Bild weiterhin entsprechend der Darstellungsmethode des Arrays anzeigen Vorher. Diese Methode führt überhaupt nicht zu einem Verlust der Bildqualität

1. Konvertieren Sie das PIL-Bildbild in Numpy-Array

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

Rufen Sie die Speichermethode der Image-Klasse direkt auf

from PIL import Image
im = Image.open('lena.png')
im.show()
4. Konvertieren Sie das Numpy-Array image

Hier verwenden wir matplotlib.image, um das Bildarray zu lesen. Beachten Sie, dass das hier gelesene Array vom Typ float32 mit einem Bereich von 0-1 ist, während die PIL.Image-Daten vom Typ uinit8 sind ein Bereich von 0-255, daher muss es konvertiert werden:
im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝

5. Konvertieren Sie RGB in ein Graustufenbild

from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass es allen beim Lernen hilft.

Weitere verwandte Artikel zu zwei Methoden zum Lesen und Anzeigen von Bildern in Python finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn