Procesamiento de imágenes de Python uno: lectura, visualización y almacenamiento de imágenes

Lectura, visualización y almacenamiento de imágenes.

skimage proporciona el módulo io para realizar operaciones de entrada y salida en imágenes. Para la comodidad de la práctica, también se proporciona un módulo de datos, que contiene algunas imágenes de muestra, que podemos usar directamente.

El módulo Importar imagen está disponible:

from skimage import io

1. Lee la imagen desde el exterior y muéstrala

Utilice la función skimage.io.imread(fname) con un parámetro que indique la ruta del archivo que se va a leer. Para mostrar una imagen, use la función skimage.io.imshow(arr) con un parámetro que indica la matriz arr que se mostrará (la imagen leída se calcula en forma de una matriz numérica). ejemplo:

from skimage import io
img=io.imread('D:/lena.bmp')
io.imshow(img)

2. El programa viene con imágenes

El programa skimage viene con algunas imágenes de muestra, si no queremos leer imágenes del exterior, podemos usar estas imágenes de muestra directamente:

Astronauta imagen del astronauta
café imagen de la taza de café
cámara persona que sostiene la imagen de la cámara
monedas imagen de la moneda
luna imagen de la luna
tablero de ajedrez imagen del tablero de ajedrez caballo página de la imagen
del caballo imagen
de la página del libro imagen
del gatito chelsea imagen
del cielo estrellado hubble_deep_field
texto imagen de texto reloj imagen
del reloj

Para mostrar estas imágenes, se puede usar el siguiente código sin ningún parámetro

from skimage import io,data
img=data.coffee()
io.imshow(img)

El nombre de la imagen corresponde al nombre de la función. Por ejemplo, el nombre de la función correspondiente a la imagen del café es café (). Estas imágenes de muestra se almacenan en el directorio de instalación de skimage, y el nombre de la ruta es data_dir. Podemos imprimir esta ruta para ver :

from skimage import data_dir
print(data_dir)

espectáculo:
aaa

En otras palabras, las siguientes dos líneas de código para leer una imagen tienen el mismo efecto:

from skimage import data_dir,data,io
img1=data.coffee() 
img2=io.imread(data_dir+'/coffee.png')  

3. Guarda la imagen

Utilice la función imsave(fname, arr) del módulo io para lograrlo. El primer parámetro indica la ruta y el nombre guardados, y el segundo parámetro indica la variable de matriz que se guardará. ejemplo:

from skimage import io,data
img=data.chelsea()
io.imshow(img)
io.imsave('d:/cat.jpg',img)

Al guardar la imagen, también desempeña la función de convertir el formato. Si el formato de imagen es una imagen jpg cuando se lee y se guarda como formato png, la imagen se convierte de una imagen jpg a una imagen png y se guarda.

4. Información de la imagen

如果想知道图像信息,可以直接打印输出,代码如下:
from skimage import io,data
img=data.chelsea()
io.imshow(img)
print(type(img))  #显示类型
print(img.shape)  #显示尺寸
print(img.shape[0])  #图像宽度
print(img.shape[1])  #图像高度
print(img.shape[2])  #图像通道数
print(img.size)   #显示总像素个数
print(img.max())  #最大像素值
print(img.min())  #最小像素值
print(img.mean()) #像素平均值

5. Dibujo de imagen

matplotlib es una biblioteca de dibujo profesional, puede configurar varias ventanas de figura, establecer el título de la figura, ocultar la regla de coordenadas e incluso usar la subtrama para mostrar varias imágenes en una figura. En general, podemos importar la biblioteca matplotlib de esta manera:
import matplotlib.pyplot as plt
Es decir, en realidad usamos el módulo pyplot del paquete matplotlib para dibujar. De hecho, ya hemos utilizado el dibujo de imágenes antes, como por ejemplo:

io.imshow(img)  

La esencia de esta línea de código es usar el paquete matplotlib para dibujar la imagen y devolver un tipo de datos matplotlib después de que el dibujo sea exitoso. Por lo tanto, también podemos escribir:

import matplotlib.pyplot as plt
plt.imshow(img)

El formato de la función imshow() es:
matplotlib.pyplot.imshow(X, cmap=None)
X: La imagen o matriz a dibujar.
cmap: mapa de color (colormap), dibujado en el espacio de color RGB(A) por defecto.
Otros mapas de color opcionales son los siguientes:

espectro de color describir
otoño rojo-naranja-amarillo
hueso blanco y negro, rayos x
Frío Cian Magenta
cobre negro-cobre
bandera rojo-blanco-azul-negro
gris blanco negro
caliente negro-rojo-amarillo-blanco
VHS Espacio de color HSV, rojo-amarillo-verde-cian-azul-magenta-rojo
infierno negro-rojo-amarillo
chorro azul-cian-amarillo-rojo
magma negro-rojo-blanco
rosa negro-rosa-blanco
plasma verde-rojo-amarillo
prisma Modo rojo-amarillo-verde-azul-morado-…-verde
primavera magenta-amarillo
verano verde amarillo
viridis azul-verde-amarillo
invierno azul verde

Gray, jet, etc. son ampliamente utilizados, tales como:

plt.imshow(image,plt.cm.gray)
plt.imshow(img,cmap=plt.cm.jet)

Después de dibujar la imagen en la ventana, devuelve un objeto AxesImage. Para mostrar este objeto en la ventana, podemos llamar a la función show() para mostrarlo.

from skimage import io,data
img=data.astronaut()
dst=io.imshow(img)
print(type(dst))
io.show()

Para mostrar una imagen, también podemos escribir:

import matplotlib.pyplot as plt
from skimage import io,data
img=data.astronaut()
plt.imshow(img)
plt.show()

Métodos para crear ventanas y dividir subgráficos:

1. Use la función de figura y la función de subtrama para crear la ventana principal y la subtrama respectivamente

Ejemplo: Separar y mostrar tres canales de imágenes de astronautas simultáneamente

from skimage import data
import matplotlib.pyplot as plt
img=data.astronaut()
plt.figure(num='astronaut',figsize=(8,8))  #创建一个名为astronaut的窗口,并设置大小 
plt.subplot(4,1,1)     #将窗口分为两行两列四个子图,则可显示四幅图像
plt.title('origin image')   #第一幅图像标题
plt.imshow(img)      #绘制第一幅图像

plt.subplot(4,1,2)     #第二个子图
plt.title('R channel')   #第二幅图像标题
plt.imshow(img[:,:,0],plt.cm.gray)      #绘制第二幅图像,且为灰度图
plt.axis('off')     #不显示坐标尺寸

plt.subplot(4,1,3)     #第三个子图
plt.title('G channel')   #第三幅图像标题
plt.imshow(img[:,:,1],plt.cm.gray)      #绘制第三幅图像,且为灰度图
plt.axis('off')     #不显示坐标尺寸

plt.subplot(4,1,4)     #第四个子图
plt.title('B channel')   #第四幅图像标题
plt.imshow(img[:,:,2],plt.cm.gray)      #绘制第四幅图像,且为灰度图
plt.axis('on')     #显示坐标尺寸

plt.show()   #显示窗口

En el proceso de dibujo de imágenes, usamos la función figure() en el módulo matplotlib.pyplot para crear una ventana de visualización. El formato de esta función es:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

Todos los parámetros son opcionales y tienen valores predeterminados, por lo que esta función se puede llamar sin ningún parámetro, entre ellos:
num: ya sea de tipo entero o carácter. Si se establece en un número entero, el número entero representa el número de serie de la ventana. Si se establece en Cadena, la cadena representa el nombre de la ventana. Use este parámetro para nombrar la ventana.Si dos ventanas tienen el mismo número de serie o nombre, la última ventana cubrirá la anterior.

figsize: establece el tamaño de la ventana. Es un entero de tipo tupla, como figsize=(8, 8)
dpi: Número entero, que indica la resolución de la ventana.
facecolor: El color de fondo de la ventana.
edgecolor: El color del borde de la ventana.
La ventana creada con la función figure() solo puede mostrar una imagen. Si desea mostrar varias imágenes, debe dividir la ventana en varias subfiguras y mostrar diferentes imágenes en cada subfigura. Podemos usar la función subplot() para dividir la subparcela, el formato de la función es:
matplotlib.pyplot.subplot(nrows, ncols, plot_number)
nrows: el número de filas de la subparcela.
ncols: el número de columnas de la subparcela.
plot_number: El número de la subparcela actual.
como:

plt.subplot(2,2,1)#则表示将figure窗口划分成了2行2列共4个子图,当前为第1个子图。我们有时也可以用这种写法:
plt.subplot(221)#两种写法效果是一样的。
#每个子图的标题可用title()函数来设置,是否使用坐标尺可用axis()函数来设置,如:
plt.subplot(221)
plt.title("first subwindow")
plt.axis('off')   

2. Use subgráficos para crear ventanas de visualización y dividir subgráficos

Hay otro método de escritura que también puede dividir subgrafos, por ejemplo:

import matplotlib.pyplot as plt
from skimage import data,color

img = data.coffee()

fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()

ax0.imshow(img)
ax0.set_title('Origin image')

ax1.imshow(img[:, :, 0], cmap=plt.cm.gray)
ax1.set_title('R channel')

ax2.imshow(img[:, :, 1], cmap=plt.cm.gray)
ax2.set_title('G channel')

ax3.imshow(img[:, :, 2], cmap=plt.cm.gray)
ax3.set_title('B channel')

for ax in axes.ravel():
    ax.axis('off')

fig.tight_layout()  #自动调整subplot间的参数

Use la función subplots() directamente para crear y dividir ventanas. Tenga en cuenta que hay una s más que la función subplot() anterior, y el formato de esta función es:

matplotlib.pyplot.subplots(nrows=1, ncols=1)
nrows: el número de filas de todas las subtramas, el valor predeterminado es 1.
ncols: número de columnas en todas las subparcelas, el valor predeterminado es 1.

Devuelve una figura de ventana y un objeto hacha de tipo tupla, que contiene todas las subfiguras, que se pueden combinar con la función ravel() para enumerar todas las subfiguras, como:

fig, axes = plt.subplots(2, 2, figsize=(7, 6))
ax0, ax1, ax2, ax3 = axes.ravel()
# 创建了2行2列4个子图,分别取名为ax0,ax1,ax2和ax3, 每个子图的标题用set_title()函数来设置,如:
ax0.imshow(img)
ax0.set_title("Original image")
# 如果有多个子图,我们还可以使用tight_layout()函数来调整显示的布局,该函数格式为:
matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
# 所有的参数都是可选的,调用该函数时可省略所有的参数。
pad: 主窗口边缘和子图边缘间的间距,默认为1.08
h_pad, w_pad: 子图边缘之间的间距,默认为 pad
rect: 一个矩形区域,如果设置这个值,则将所有的子图调整到这个矩形区域内。
# 一般调用为:
plt.tight_layout()  #自动调整subplot间的参数

En resumen, las funciones comúnmente utilizadas para dibujar y mostrar imágenes son:

Nombre de la función Función formato de llamada
cifra Crear una ventana de visualización plt.figure(num=1,figsize=(8,8)
immostrar dibujar imagen plt.imshow(imagen)
espectáculo ventana de visualización plt.mostrar()
subtrama Subgrafo de partición plt.subparcela(2,2,1)
título Establecer el título de la subtrama (usado junto con la subtrama) plt.title('imagen de origen')
eje Ya sea para mostrar la regla de coordenadas plt.axis('apagado')
subtramas Crear una ventana con varias subparcelas fig,axes=plt.subplots(2,2,figsize=(8,8))
enmarañar establecer variables para cada subparcela ax0,ax1,ax2,ax3=ejes.ravel()
set_title Establecer el título de la subtrama (utilizado junto con los ejes) ax0.set_title('primera ventana')
diseño_apretado Ajustar automáticamente el diseño de visualización de la subparcela plt.tight_layout()

Supongo que te gusta

Origin blog.csdn.net/weixin_52051554/article/details/127358856
Recomendado
Clasificación