Procesamiento de imágenes sin OpenCV | Python

Sabemos que OpenCV se usa ampliamente para operar con imágenes y tiene un amplio espectro de funciones para hacerlo. Pero, ¿qué sucede si queremos procesar los archivos de imagen sin usar ninguna biblioteca externa como OpenCV? Veamos cómo podemos hacer esto. 
 

Escalado de la imagen (usando la interpolación del vecino más cercano):

La interpolación del vecino más cercano es la forma más sencilla de interpolación. Este método simplemente determina el píxel vecino «más cercano» y asume su valor de intensidad.
Considere una imagen pequeña que tiene ‘w’ píxeles de ancho por ‘h’ píxeles de alto, que queremos redimensionar a ‘p’ píxeles de ancho por ‘q’ píxeles de alto, asumiendo que p>m y q>n. Ahora, necesitamos dos constantes de escala:
 

scale_x = p/w
scale_y = q/h

Ahora, simplemente recorremos todos los píxeles en la imagen de salida, dirigiéndonos a los píxeles de origen para copiar escalando nuestras variables de control por scale_x y scale_y , y redondeando los valores de índice escalados resultantes.
Representación pictórica: 
Imagen de 3X3 píxeles (9 píxeles en total), ahora si queremos aumentar el tamaño de la imagen hasta 6X6, según el algoritmo vecino más cercano, 6/3 (es decir, 2) píxeles deben tener el mismo valor RGB que el de el píxel en la imagen original.
 

Programa para escalar una Imagen: 
 

Python3

# using matplotlib and numpy
 
import matplotlib.image as img
import numpy as npy
 
# provide the location of image for reading
m = img.imread("taj.png");
 
# determining the length of original image
w, h = m.shape[:2];
 
# xNew and yNew are new width and
# height of image required
after scaling
xNew = int(w * 1 / 2);
yNew = int(h * 1 / 2);
 
# calculating the scaling factor
# work for more than 2 pixel
xScale = xNew/(w-1);
yScale = yNew/(h-1);
 
# using numpy taking a matrix of xNew
# width and yNew height with
# 4 attribute [alpha, B, G, B] values
newImage = npy.zeros([xNew, yNew, 4]);
 
for i in range(xNew-1):
   for j in range(yNew-1):
       newImage[i + 1, j + 1]= m[1 + int(i / xScale),
                                 1 + int(j / yScale)]
 
# Save the image after scaling
img.imsave('scaled.png', newImage);

Producción: 
 

Escala de grises de una imagen:

Usando el método de valor promedio, este método resalta la intensidad del píxel en lugar de mostrar en qué valores RGB consiste. Cuando calculamos el valor promedio de RGB y lo asignamos al valor RGB del píxel, dado que el valor RGB del píxel es el mismo, no podrá crear ningún color ya que todos los colores se forman debido a una proporción diferente del valor RGB ya que en esta relación de casos será 1:1:1. Por lo tanto, la imagen formada entonces se verá como una imagen gris.
Representación pictórica: 
 

Programa para la escala de grises de una imagen: 
 

Python3

# using numpy
import numpy as npy
 
# using matplotlib
import matplotlib.image as img
 
# using statistics to import mean
# for mean calculation
from statistics import mean
 
m = img.imread("taj.png")
 
# determining width and height of original image
w, h = m.shape[:2]
 
# new Image dimension with 4 attribute in each pixel
newImage = npy.zeros([w, h, 4])
print( w )
print( h )
 
for i in range(w):
   for j in range(h):
      # ratio of RGB will be between 0 and 1
      lst = [float(m[i][j][0]), float(m[i][j][1]), float(m[i][j][2])]
      avg = float(mean(lst))
      newImage[i][j][0] = avg
      newImage[i][j][1] = avg
      newImage[i][j][2] = avg
      newImage[i][j][3] = 1 # alpha value to be 1
 
# Save image using imsave
img.imsave('grayedImage.png', newImage)

Producción: 
 

Recorte de una imagen:

Recortar es básicamente eliminar el píxel no deseado. Esto se puede hacer tomando el píxel requerido en una cuadrícula de imagen diferente cuyo tamaño sea el requerido después del recorte. 
Considere una imagen de tamaño 10 X 10 píxeles y si necesitamos recortar solo el centro de la imagen con 4 X 4 píxeles, entonces debemos recopilar los valores de píxeles desde (10-4)/2 a partir de (3, 3) hasta 4 píxeles en la dirección x y 4 píxeles en la dirección y .
Representación pictórica: 
 

Programa para recortar una imagen: 
 

Python3

# using matplotlib and numpy
import matplotlib.image as img
import numpy as npy
 
# reading image in variable m
m = img.imread("taj.png")
 
# determining dimension of image width(w) height(h)
w, h = m.shape[:2]
 
# required image size after cropping
xNew = int(w * 1 / 4)
yNew = int(h * 1 / 4)
newImage = npy.zeros([xNew, yNew, 4])
 
# print width height of original image
print(w)
print(h)
 
for i in range(1, xNew):
    for j in range(1, yNew):
       # cropping start from 100, 100 pixel of original image
        newImage[i, j]= m[100 + i, 100 + j]
 
# save image
img.imsave('cropped.png', newImage)

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por rakesh797 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *