Instituto Politécnico Nacional
Instituto Politécnico Nacional
Escuela Superior de
Escuela Superior de Ingeniería Mecánica y Eléctrica
Ingeniería Mecánica y
Eléctrica
Unidad Adolfo López Mateos, Zacatenco
Profesor:
Ing. David López Romero
PRÁCTICA 3: IMÁGENES COMO
MATRICES EN PYTHON
Grupo: 4cv5 Materia: LAB. De Teoremas de Circuitos
Profesor: ABDIEL REYES VERA
Integrantes:
Alumno: Martínez Hernández Emmanuel
➢ Martínez Hernández Emmanuel
Nombre de Practica:
Grupo: 9CV13
➢ ESTRUCTURAS PASIVAS DE 2 TERMINALES
Boleta:2019300269
Fecha: 14/09/2023
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
INTRODUCCIÓN
Python es un lenguaje de programación de alto nivel que se destaca por su versatilidad y facilidad
de uso. Fue creado a fines de la década de 1980 por Guido van Rossum y desde entonces ha
ganado una gran popularidad en todo el mundo. Su nombre no proviene de la serpiente, sino de la
comedia británica "Monty Python's Flying Circus", una serie de televisión que le gustaba al
creador del lenguaje.
Python se enorgullece de su sintaxis clara y legible que favorece la comprensión y la escritura de
código limpio. Esto lo convierte en un lenguaje ideal tanto para principiantes como para
programadores experimentados. Es un lenguaje "multipropósito" que puede adaptarse a diversas
tareas y se utiliza en una amplia gama de aplicaciones, desde desarrollo web y científico hasta
automatización, aprendizaje automático y análisis de datos.
Python cuenta con una comunidad activa de desarrolladores en todo el mundo, lo que ha dado
lugar a una gran cantidad de bibliotecas y módulos que amplían sus capacidades y permiten
abordar una variedad de proyectos. Es un lenguaje interpretado y de alto nivel, lo que significa que
el código se ejecuta línea por línea en tiempo real y permite a los programadores concentrarse en
la lógica del programa en lugar de detalles técnicos.
Python es compatible con múltiples plataformas y se puede ejecutar en una variedad de sistemas
operativos. Su sintaxis clara y su facilidad de uso lo hacen amigable para principiantes, y la
comunidad ofrece recursos y tutoriales accesibles para quienes están comenzando en la
programación.
Además, Python se ha convertido en el lenguaje preferido para el aprendizaje automático y la
ciencia de datos gracias a bibliotecas como NumPy, pandas, scikit-learn y TensorFlow. También
se utiliza en el desarrollo web mediante marcos como Django y Flask, lo que facilita la creación de
aplicaciones web robustas y escalables. Python es ideal para la automatización de tareas repetitivas
y la creación de scripts, lo que lo hace valioso en administración de sistemas y tareas de flujo de
trabajo. En resumen, Python es un lenguaje de programación versátil y poderoso con un amplio
espectro de aplicaciones.
Historia de Python
Años 80: Python fue creado por Guido van Rossum, un programador holandés, en diciembre de
1989. La primera versión, Python 0.9.0, se lanzó en febrero de 1991.
Nombre: El nombre "Python" no proviene de la serpiente, sino de la comedia británica "Monty
Python's Flying Circus", que le gustaba a Guido van Rossum. Fue elegido un nombre divertido
para el nuevo lenguaje.
Principios de Diseño: Guido van Rossum diseñó Python con un fuerte énfasis en la legibilidad del
código y la simplicidad. La filosofía de Python, conocida como "Zen de Python", se documenta en
el PEP 20 (Python Enhancement Proposal) y destaca principios como la legibilidad es importante,
la simplicidad es mejor que la complejidad y otros.
2
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Python ha experimentado un crecimiento constante a lo largo de los años y se ha convertido en
uno de los lenguajes de programación más populares y ampliamente utilizados en una variedad de
aplicaciones, desde desarrollo web hasta aprendizaje automático y ciencia de datos. Su comunidad
activa y su continua evolución hacen que Python siga siendo relevante y poderoso en el mundo de
la programación.
MARCO TEÓRICO
Gráficos Generados por Computadora en Python
Los gráficos generados por computadora son representaciones visuales de datos o conceptos que
se crean mediante el uso de programas informáticos. Estos gráficos son ampliamente utilizados en
diversas disciplinas, como la informática, la visualización de datos, la simulación, la animación, el
diseño gráfico y la investigación científica. En el contexto de la programación con Python, se
utilizan bibliotecas como OpenCV y Matplotlib para crear gráficos personalizados.
A continuación, se presenta un marco teórico que aborda los elementos clave relacionados con la
creación de gráficos generados por computadora en Python:
1. Bibliotecas de Gráficos en Python:
• Python ofrece una variedad de bibliotecas para crear gráficos, imágenes y
visualizaciones personalizadas. Dos bibliotecas comunes son OpenCV y
Matplotlib.
• OpenCV (Open Source Computer Vision Library) se utiliza principalmente en
aplicaciones de procesamiento de imágenes y visión por computadora. Proporciona
herramientas para crear y manipular imágenes y videos.
• Matplotlib es una biblioteca de visualización que permite crear gráficos 2D y 3D de
alta calidad. Es ampliamente utilizado en la generación de gráficos científicos y
técnicos.
2. Creación de Imágenes en Blanco:
• Un paso inicial en la creación de gráficos generados por computadora es la
generación de una imagen en blanco. Esto se logra mediante la creación de matrices
de píxeles que representan la imagen.
3. Dibujo de Formas y Elementos Gráficos:
• Los gráficos se crean mediante la manipulación de la matriz de píxeles para dibujar
formas geométricas, líneas, curvas, círculos, elipses y otros elementos gráficos.
• OpenCV proporciona funciones como cv2.circle, cv2.rectangle, cv2.line, y más
para dibujar elementos gráficos.
• Matplotlib ofrece funciones para crear gráficos, diagramas de dispersión,
histogramas y visualizaciones personalizadas.
3
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
4. Manipulación de Colores y Estilos:
• Los colores y estilos son elementos importantes en la creación de gráficos. Se
pueden personalizar mediante la especificación de valores RGB (Red, Green, Blue)
o el uso de colores predefinidos.
• La configuración de grosor de línea, transparencia y estilos de línea también afecta
la apariencia visual de los gráficos.
5. Incorporación de Texto y Anotaciones:
• Los gráficos a menudo incluyen etiquetas, títulos, leyendas y otras anotaciones para
proporcionar información adicional.
• Las bibliotecas gráficas permiten agregar texto a los gráficos mediante funciones
como cv2.putText en OpenCV y plt.text en Matplotlib.
6. Contexto de Investigación:
• En un contexto de investigación, los gráficos generados por computadora se utilizan
para visualizar datos, presentar resultados de experimentos, representar modelos
teóricos y mostrar ilustraciones conceptuales.
• Los gráficos ayudan a comunicar de manera efectiva información compleja a
audiencias técnicas y no técnicas.
7. Personalización y Ajustes:
• Los gráficos generados por computadora se pueden personalizar ampliamente. Los
investigadores y diseñadores pueden ajustar aspectos visuales, como colores,
tamaños y estilos, para lograr los objetivos de comunicación deseados.
Google Colab como Plataforma de Aprendizaje y Desarrollo
Google Colab, abreviatura de "Google Colaboratory", es una plataforma en línea que ofrece un
entorno de desarrollo integrado (IDE) basado en la nube que permite a los usuarios escribir,
ejecutar y compartir código Python de manera colaborativa. A continuación, se presentan los
elementos clave del marco teórico de Google Colab:
1. Historia y Propósito:
• Google Colab fue lanzado por Google en 2017 como una plataforma gratuita para
facilitar la programación en Python y el aprendizaje automático en la nube.
• Su objetivo es proporcionar un entorno de desarrollo accesible y colaborativo que
no requiera configuración previa ni instalación de software en el equipo del usuario.
4
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
2. Basado en Jupyter Notebook:
• Google Colab se basa en la tecnología de los cuadernos Jupyter, que son
documentos interactivos que combinan texto enriquecido, código y resultados en un
solo lugar.
• Esto permite a los usuarios crear documentos que incluyan narrativa, código y
visualizaciones en un formato interactivo y compartible.
3. Acceso Gratuito y Almacenamiento en la Nube:
• Google Colab ofrece acceso gratuito a máquinas virtuales con recursos
computacionales, lo que permite a los usuarios ejecutar código en servidores de
Google sin costo.
• Los usuarios pueden almacenar y acceder a sus cuadernos en Google Drive, lo que
facilita el acceso desde cualquier lugar y la colaboración en tiempo real.
4. Bibliotecas y Recursos Preinstalados:
• Google Colab viene con muchas bibliotecas de Python preinstaladas, lo que
simplifica el proceso de desarrollo y análisis de datos.
• También proporciona acceso a GPU (Unidades de Procesamiento Gráfico) de forma
gratuita, lo que lo convierte en una elección popular para tareas de aprendizaje
automático y entrenamiento de modelos.
5. Colaboración en Tiempo Real:
• Los usuarios pueden colaborar en cuadernos en tiempo real, lo que facilita el
trabajo en equipo y la revisión de código.
• Google Colab permite la edición y el comentario colaborativo, lo que mejora la
colaboración en proyectos.
6. Educación y Aprendizaje Automático:
• Google Colab es ampliamente utilizado en educación y en la enseñanza de Python y
el aprendizaje automático debido a su accesibilidad y recursos gratuitos.
• Los usuarios pueden acceder a conjuntos de datos públicos y ejemplos de código
que facilitan la práctica y el aprendizaje.
7. Integración con Google Services:
• Google Colab se integra con otros servicios de Google, como Google Sheets y
Google BigQuery, lo que permite la importación y exportación de datos de manera
sencilla.
En resumen, Google Colab es una plataforma en línea que brinda a los usuarios un entorno de
desarrollo de Python colaborativo y basado en la nube. Su objetivo es simplificar la programación
5
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
y el aprendizaje automático al proporcionar acceso gratuito a recursos computacionales y
herramientas de colaboración en tiempo real.
DESARROLLO
Comenzamos esta práctica ejecutando el navegador de preferencia en el cual buscamos “Google
colab” una vez dentro del entorno de desarrollo integrado pasamos a crear una cuenta para acceder
y poder guardar nuestros códigos y resultados
Una vez dentro del IDE procedemos a crear un nuevo proyecto en donde escribiremos nuestro
código
6
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Donde el primer apartado escribimos las librerías a utilizar y al final los comandos necesario para
mostrar el resultado, estas son las librerías que necesitaremos en todos los proyectos, pero se
pueden agregar más librerías dependiendo de las necesidades del proyecto
Descripción de librerías y Comandos
• cv2.imread(): Carga una imagen desde un archivo.
• cv2.subtract(): Realiza una resta entre dos imágenes.
• cv2.addWeighted(): Combina dos imágenes utilizando pesos.
• io.imread(): Carga imágenes desde una URL o ubicación local.
• plt.subplots(): Crea una figura con subplots en una cuadrícula.
• plt.imshow(): Muestra una imagen en un subplot.
• plt.title(): Establece un título para un subplot.
• plt.tight_layout(): Ajusta automáticamente los espacios entre subplots.
• plt.show(): Muestra la figura con subplots en una ventana gráfica.
• fig.set_size_inches(): Establece el tamaño de la figura en pulgadas.
Estos comandos son comunes al trabajar con procesamiento de imágenes y visualización en
Python, utilizando bibliotecas como OpenCV, scikit-image y Matplotlib.
Para la imagen 1: Suma de imágenes
Utilice el siclo for y los comandos vistos en clase para poder sumar las imágenes el ciclo me ayudo
a realizar el efecto donde una se desvanece y la otra se vuelve mas visible.
7
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Para la imagen 2: Resta de imágenes
Para esta imagen decidí buscar la forma de optimizar el código, esto lo hice mediante un ciclo for
el cual me permito generar en una sola pantalla de impresión todas las imágenes tanto las
originales como las restas
8
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
9
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Para la imagen 3:Traslación
Paras esta imagen use los comandos en clase y la imagen de mi preferencia dejándola en una
posición poco inusual y demostrando lo que hace este comando
10
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Para la imagen 4: Rotar la Imagen 45 grados verticalmente
En esta imagen usé el concepto de matriz, pero estas vez no usé la función traslación, use otra
donde las filas y columnas hacen un papel importante para determinar la posición que genera el
mismo efecto que el ejercicio de la practica anterior
Para la imagen 5 Matriz de imágenes:
Para este experimento tomé el código que proporcionó el profesor en clase, este experimento
resalta por la peculiaridad de usar el comando subplot varias veces
11
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Experimentos y Hallazgos
Imagen 1 (Suma de imágenes): Durante la realización de esta imagen experimente el uso de el
ciclo for para ahorrar líneas de código donde el hallazgo fue que pude recuperar imágenes del ciclo
si uso sentencias de control en este caso la sentencia if me ayudo pues aproveche los parámetros
del peso de la imagen para encontrar la imagen que quería, esto me permitió realizar con éxito el
ultimo experimento también dentro de los experimentos me di cuenta que no todas las imágenes de
la web son manipulables y que para poder sumarlas estas deben tener los mismos pixeles en este
caso fue de 1200x645
Imagen 2 (Resta de Imágenes ): A partir del del código proporcionado en clase por el profesor
construí una matriz de 2x2 donde la fila uno y columna uno se mostraría la imagen 1, en la fila uno
columna dos la imagen 2 en la fila dos columna uno la resta entre la imagen 1 y 2, y en la fila dos
columna dos la resta entre las imágenes 2 y 1 pero el resto consistía en realizar esa venta para 5
pareces de imágenes así que serían bastantes líneas de código pues prácticamente seria repetir ese
código 5 veces así que indagando como hallazgo encontré el poder crear listas a partir de
imágenes que se rescatan de la web donde use un ciclo for para mostrar las 5 ventanas en una sola
impresión, así como el uso de apuntadores para poder saber donde colocar las imágenes,
experimentando con los parámetros me di cuenta que la matriz debe ser cuadrada de lo contrario
no las imprime también hallé la forma de rescatar imágenes del ciclo for mediante el uso de listas
donde guarde las imágenes que se restan, esto me ayudo a poder realizar el último experimento
Imagen 3 (Traslación de imágenes): Durante el Experimento usando los comandos proporcionados
por el profesor en clase cambie la imagen original por una de la web donde me percate de la
peculiaridad del comando “M=np.float32([[1,1,-80],[0,1,-100]])” que toma la figura como un
objeto en 3 dimensiones espaciales a diferencia del comando utilizado en la practica anterior que
toma la tercera dimensión como canales de color, en este caso si se manipula la profundidad más
exactamente el primer 1 del los tres primeros parámetros y el segundo 1 de los segundos tres
parámetros esto me resulta interesante pues me hace pensar que el comando interpreta las
imágenes en un espacio cartesiano tridimensional
Imagen 4 (Rotación de imágenes): Para este experimento utilicé los comandos dados por el
profesor donde destaco que el comando “M=cv2.getRotationMatrix2D((cols/2,rows/2),45,1)“
interpreta los puntos de una matriz donde dividir las filas y columnas entre 2 permite rotar la
imagen, este comando es mas efectivo que el que yo use en la practica anterior pues en este si se
puede controlar el ángulo, como experimento y hallazgo resalto que si divides las columnas entre
otro numero la imagen se deforma al punto de ser irreconocible
Imagen 5 (Uso de marcos y comando subplot): Usando los códigos vistos en clase realicé el
experimento resaltando que se pueden mostrar imágenes en una sola que se pueden mandar a
llamar imágenes usadas en otros experimentos y que podemos manipular las mismas imágenes
dentro del comando, por ejemplo : Reflect que crea un efecto espejo en agua, también se puede
manipular los títulos de estas.
12
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Imagen 6 Matriz de imágenes) : Para este experimento decidí crear una matriz de 2x3 donde el
hallazgo es el comando “plt.subplots(2, 3, figsize=(8, 4))” donde este comando cuenta con los
parámetros de la matriz (2,3)y el tamaño de separación del reglón (8,4) apartir de este comando es
necesario recurrir a los siguientes: “axs[0, 0].imshow(imagen_peso_0_5)” y
“axs[0,0].set_title('Suma 50-50%')” donde el primero indica en que posición de la matriz
aparecerá las imágenes, y el otro inserta el título a la imagen también aquí pude emplear los
hallazgos anteriores pudiendo rescatar de ciclos las imágenes que yo quiera, me parece más útil
esta forma de imprimir ya que presenta las imágenes de una forma más ordenada.
Conclusiones
Cumplí con el objetivo de la practica donde comprendí la manipulación de imágenes. A través de
los comandos y ejemplos proporcionados, he adquirido una comprensión más sólida de cómo
trabajar con imágenes, realizar operaciones de transformación y visualizar resultados utilizando
bibliotecas como OpenCV, scikit-image y Matplotlib.
Uno de los aspectos fundamentales que he aprendido es cómo cargar y manipular imágenes
utilizando skimage.io.imread. Esta función es esencial para cargar imágenes desde diferentes
fuentes, incluidas las URL de Internet, lo que permite una flexibilidad significativa en la
manipulación de datos visuales.
Además, he comprendido cómo aplicar transformaciones en imágenes utilizando cv2 (OpenCV),
como la transformación afín con cv2.warpAffine. La capacidad de realizar rotaciones, traslaciones
y otras transformaciones es esencial en muchas aplicaciones de procesamiento de imágenes, como
la visión por computadora y el análisis de imágenes médicas.
También he aprendido sobre las diferentes técnicas de manipulación de bordes y relleno de
imágenes utilizando cv2.copyMakeBorder. Este proceso es fundamental para preparar imágenes
antes de aplicar ciertos algoritmos o técnicas de procesamiento de imágenes, y las opciones de
borde, como la replicación, el reflejo y el relleno constante, brindan un control preciso sobre el
tratamiento de los bordes de las imágenes.
El uso de matplotlib para la visualización de imágenes en subplots ha sido otra habilidad valiosa
que he adquirido. Esto es especialmente útil cuando se desea mostrar múltiples imágenes o
resultados en una sola figura para su análisis comparativo.
Al final comprendí que:
El primer código realiza una mezcla ponderada de dos imágenes, mostrando una serie de
resultados con diferentes proporciones de mezcla en una figura de subplots. Esto permite
visualizar cómo se combinan dos imágenes en diferentes proporciones.
El segundo código aplica diversas transformaciones y manipulaciones a una imagen, incluyendo
traslación y rotación. Luego, muestra las imágenes transformadas en subplots para su visualización
y análisis.
13
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
El tercer código muestra varias imágenes con diferentes efectos de borde y relleno utilizando la
biblioteca OpenCV. Las imágenes se organizan en subplots en una figura, lo que facilita la
comparación de los efectos de borde.
Y que la recursividad es importante para realizar los últimos dos experimentos
ANEXOS
Para La Suma:
import numpy as np
import cv2
from skimage import io
import matplotlib.pyplot as plt
#Rescatar dos Imagenes de Internet
img1 = io.imread('https://www.autotrader.com/wp-
content/uploads/2023/06/2024-chevrolet-malibu-front.jpg')
img2 = io.imread('https://gray-kcrg-
prod.cdn.arcpublishing.com/resizer/mC3n-
6fDW5a7jsBKOdKELmeStuY=/1200x675/smart/filters:quality(85)/cloudfront-us-
east-1.images.arcpublishing.com/gray/QTJZQBG2BRPKFPRI4OABNQPYLE.jpg')
# Crear una figura con 2 filas y 5 columnas
fig, axs = plt.subplots(2, 5, figsize=(20, 8))
# Iterar a través de 10 incrementos
for i in range(10):
# Calcular el peso actual
Peso_img1 = 0 + i * 0.1
Peso_img2 = 1 - i * 0.1
# Realizar la mezcla ponderada
dst = cv2.addWeighted(img1, Peso_img1, img2, Peso_img2, 0)
# Mostrar la imagen en el subplot correspondiente
fila = i // 5 # Determinar la fila actual
colum = i % 5 # Determinar la columna actual
axs[fila, colum].imshow(dst)
axs[fila, colum].set_title(f'Peso img1 = {Peso_img1:.1f}\nPeso img2 =
{Peso_img2:.1f}')
if Peso_img1 == 0.5 and Peso_img2 == 0.5:
imagen_peso_0_5 = dst
# Ajustar los espacios entre los subplots
plt.tight_layout()
14
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
# Mostrar la figura
plt.show()
Para La matriz de Restas:
import numpy as np
import cv2
from skimage import io
import matplotlib.pyplot as plt
# URLs de las 10 imágenes (debes proporcionar las URLs correctas)
imagenes_urls = [
'https://www.autotrader.com/wp-content/uploads/2023/06/2024-chevrolet-
malibu-front.jpg',
'https://gray-kcrg-prod.cdn.arcpublishing.com/resizer/mC3n-
6fDW5a7jsBKOdKELmeStuY=/1200x675/smart/filters:quality(85)/cloudfront-us-
east-1.images.arcpublishing.com/gray/QTJZQBG2BRPKFPRI4OABNQPYLE.jpg',
'https://www.todofondos.net/wp-content/uploads/1200x675-TAS-Hoy-TE-
OFREZCO-IGURO-OBANAI-SIN-SU-MASCARA.jpg',
'https://www.nintenderos.com/wp-content/uploads/2022/08/Naruto-1-
1200x675.jpg',
'https://www.clicacoches.com/wp-content/uploads/2021/02/Nuevo-logo-de-
Lexus-1200x675.jpg',
'https://depor.com/resizer/wNx3iIAeYMxw1jD-
KSwYANpXe00=/1200x675/smart/filters:format(jpeg):quality(75)/cloudfront-us-
east-1.images.arcpublishing.com/elcomercio/T3Q4ESDZQ5GWLAPZYFB2FIHM4Y.jpg',
'https://www.aetolia.com/wp-content/uploads/2019/06/leviathan-
1200x675.jpg',
'https://bleedingcool.com/wp-content/uploads/2019/04/mortal-kombat-11-
review-4-1200x675.jpg',
'https://bleedingcool.com/wp-content/uploads/2022/10/noob-saibot-13-
scale-statue-pcs_mortal-kombat_gallery_63483e20682f3-1200x675.jpg',
'https://bleedingcool.com/wp-content/uploads/2022/12/Mortal-Kombat-XI-
Scorpion-SE-016-1200x675.jpg'
]
# Crear una lista para almacenar las imágenes
imagenes = [io.imread(url) for url in imagenes_urls]
# Número de ventanas a mostrar (en este caso, 5)
num_ventan = len(imagenes) // 2
# Crear una lista para almacenar las imágenes de diferencia
imagenes_diferencia1 = []
imagenes_diferencia2 = []
15
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
for i in range(num_ventan):
# Índices de las imágenes para esta ventana
idx1 = i * 2
idx2 = idx1 + 1
# Crear una figura con 2 filas y 2 columnas
fig, axs = plt.subplots(2, 2, figsize=(8, 5))
# Mostrar la primera imagen en la fila 1, columna 1
axs[0, 0].imshow(imagenes[idx1])
axs[0, 0].set_title(f'Imagen {idx1 + 1}')
# Mostrar la segunda imagen en la fila 1, columna 2
axs[0, 1].imshow(imagenes[idx2])
axs[0, 1].set_title(f'Imagen {idx2 + 1}')
# Calcular y mostrar la diferencia img1 - img2 en la fila 2, columna 1
diff1 = cv2.subtract(imagenes[idx1], imagenes[idx2])
axs[1, 0].imshow(diff1)
axs[1, 0].set_title(f'Diferencia {idx1 + 1} - {idx2 + 1}')
imagenes_diferencia1.append(diff1)
# Calcular y mostrar la diferencia img2 - img1 en la fila 2, columna 2
diff2 = cv2.subtract(imagenes[idx2], imagenes[idx1])
axs[1, 1].imshow(diff2)
axs[1, 1].set_title(f'Diferencia {idx2 + 1} - {idx1 + 1}')
imagenes_diferencia2.append(diff2)
fig = plt.figure()
fig.set_size_inches(12, 6.75)
# Ajustar los espacios entre los subplots
plt.tight_layout()
# Mostrar la ventana actual
plt.show()
imagen_diff_1 = imagenes_diferencia1[1]
imagen_diff_2 = imagenes_diferencia2[1]
Para La Traslación:
rows,cols,ch=img1.shape
M=np.float32([[1,1,-80],[0,1,-100]])
dst1=cv2.warpAffine(img1,M,(cols,rows))
plt.imshow(dst1)
16
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
Para La Rotación:
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
dst2=cv2.warpAffine(img1,M,(cols,rows))
plt.imshow(dst2)
Para La matriz usando subplot:
replicate=cv2.copyMakeBorder(img2,500,500,500,500,cv2.BORDER_REPLICATE)
reflect=cv2.copyMakeBorder(img2,500,500,500,500,cv2.BORDER_REFLECT)
reflect101=cv2.copyMakeBorder(img2,500,500,500,500,cv2.BORDER_REFLECT_101)
wrap=cv2.copyMakeBorder(img2,500,500,500,500,cv2.BORDER_WRAP)
constant=cv2.copyMakeBorder(img2,500,500,500,500,cv2.BORDER_CONSTANT,value=
[0,0,0])
plt.subplot(231),plt.imshow(img2),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant),plt.title('CONSTANT')
Para La matriz de imágenes de toso los experimentos:
fig, axs = plt.subplots(2, 3, figsize=(8, 4))
# Mostrar las figuras en los subplots
axs[0, 0].imshow(imagen_peso_0_5)
axs[0, 0].set_title('Suma 50-50%')
axs[0, 1].imshow(imagen_diff_1)
axs[0, 1].set_title('Resta')
axs[0, 2].imshow(dst1)
axs[0, 2].set_title('Traslación')
axs[1, 1].imshow(dst2)
axs[1, 1].set_title('Rotación')
axs[1, 0].imshow(reflect)
axs[1, 0].set_title('REFLECT')
axs[1, 2].imshow(imagen_diff_2)
axs[1, 2].set_title('Resta')
17
Instituto Politécnico Nacional
Escuela Superior de Ingeniería Mecánica y Eléctrica
plt.tight_layout()
plt.show()
18