En este artículo vamos a ver cómo dividir imágenes en partes iguales utilizando OpenCV en Python. Estamos familiarizados con las listas de python y el corte de listas en una dimensión. Pero aquí, en el caso de las imágenes, utilizaremos la comprensión de listas 2D, ya que las imágenes son una array 2D de intensidad de píxeles.
Imagen utilizada:
Python3
import cv2 img = cv2.imread('img.jpg') # cv2.imread() -> takes an image as an input h, w, channels = img.shape half = w//2 # this will be the first column left_part = img[:, :half] # [:,:half] means all the rows and # all the columns upto index half # this will be the second column right_part = img[:, half:] # [:,half:] means al the rows and all # the columns from index half to the end # cv2.imshow is used for displaying the image cv2.imshow('Left part', left_part) cv2.imshow('Right part', right_part) # this is horizontal division half2 = h//2 top = img[:half2, :] bottom = img[half2:, :] cv2.imshow('Top', top) cv2.imshow('Bottom', bottom) # saving all the images # cv2.imwrite() function will save the image # into your pc cv2.imwrite('top.jpg', top) cv2.imwrite('bottom.jpg', bottom) cv2.imwrite('right.jpg', right_part) cv2.imwrite('left.jpg', left_part) cv2.waitKey(0)
Producción:
Explicación:
Primero, seleccione una imagen como entrada y léala usando la función cv2.imread(). Luego extraiga las dimensiones de la imagen usando el comando img.shape y almacene el valor en los canales h, w, respectivamente. Después de eso, realizar el corte de la lista en la imagen producirá el resultado deseado. ¿Por qué? Como se mencionó anteriormente, las imágenes no son más que una array 2D de intensidades de píxeles de color. Por lo tanto, dividir imágenes en dos o más partes significa básicamente dividir una array en dos o más partes.
Para la división horizontal, necesitamos dividir el ancho por un factor de 2 y luego tomar la array hasta ese índice y almacenarlo en una variable ‘left_part’ en este caso. Es algo parecido a esto:
left_part = img[:,:w//2]
Después de almacenar las dos partes en diferentes variables, las mostramos usando la función cv2.imshow() que toma dos argumentos: primero, el título de la imagen, que es una string, y segundo, la imagen que se mostrará. Ejemplo:
cv2.imshow('Title of the image', left_part)
Para guardar la imagen resultante en la computadora, usamos la función cv2.imwrite() que también toma dos argumentos, uno es una string y el otro es la imagen que se guardará. Ejemplo:
cv2.imwrite('name_of_the_image.jpg',left_part)
La última función cv2.waitKey() toma solo un argumento que es el tiempo en ms. cv2.waitKey(1) significa que todos los cv2.imshow() mostrarán las imágenes durante 1 ms y luego cerrarán la ventana automáticamente, mientras que cv2.waitKey(0) mostrará la ventana hasta el infinito, es decir, a menos que el usuario presione salir.
Publicación traducida automáticamente
Artículo escrito por rajarshiban13 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA