recortar opencv3 imutils imagen python image image-processing resize opencv

opencv3 - Cómo cambiar el tamaño de una imagen con OpenCV2.0 y Python2.6



resize image python (3)

Ejemplo que dobla el tamaño de la imagen

Hay dos formas de cambiar el tamaño de una imagen. El nuevo tamaño se puede especificar:

  1. A mano;

    height, width = src.shape[:2]

    dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)

  2. Por un factor de escala.

    dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC) , donde fx es el factor de escala a lo largo del eje horizontal y fy a lo largo del eje vertical.

Para contraer una imagen, generalmente se verá mejor con interpolación INTER_AREA, mientras que para agrandar una imagen, generalmente se verá mejor con INTER_CUBIC (lento) o INTER_LINEAR (más rápido pero aún se ve bien).

Ejemplo de imagen de contracción para ajustarse a una altura / ancho máximo (mantener la relación de aspecto)

import cv2 img = cv2.imread(''YOUR_PATH_TO_IMG'') height, width = img.shape[:2] max_height = 300 max_width = 300 # only shrink if img is bigger than required if max_height < height or max_width < width: # get scaling factor scaling_factor = max_height / float(height) if max_width/float(width) < scaling_factor: scaling_factor = max_width / float(width) # resize image img = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor, interpolation=cv2.INTER_AREA) cv2.imshow("Shrinked image", img) key = cv2.waitKey()

Usando tu código con cv2

import cv2 as cv im = cv.imread(path) height, width = im.shape[:2] thumbnail = cv.resize(im, (width/10, height/10), interpolation = cv.INTER_AREA) cv.imshow(''exampleshq'', thumbnail) cv.waitKey(0) cv.destroyAllWindows()

Quiero usar OpenCV2.0 y Python2.6 para mostrar imágenes redimensionadas. Usé y adopté el ejemplo en http://opencv.willowgarage.com/documentation/python/cookbook.html pero desafortunadamente este código es para OpenCV2.1 y parece que no funciona en 2.0. Aquí mi código:

import os, glob import cv ulpath = "exampleshq/" for infile in glob.glob( os.path.join(ulpath, "*.jpg") ): im = cv.LoadImage(infile) thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3) cv.Resize(im, thumbnail) cv.NamedWindow(infile) cv.ShowImage(infile, thumbnail) cv.WaitKey(0) cv.DestroyWindow(name)

Como no puedo usar

cv.LoadImageM

solía

cv.LoadImage

en cambio, lo cual no fue problema en otras aplicaciones. Sin embargo, cv.iplimage no tiene filas de atributos, cols o tamaño. ¿Alguien puede darme una pista, cómo resolver este problema? Gracias.


Podría usar la función GetSize para obtener esa información, cv.GetSize (im) devolvería una tupla con el ancho y el alto de la imagen. También puede usar im.depth e img.nChan para obtener más información.

Y para cambiar el tamaño de una imagen, usaría un proceso ligeramente diferente, con otra imagen en lugar de una matriz. Es mejor tratar de trabajar con el mismo tipo de datos:

size = cv.GetSize(im) thumbnail = cv.CreateImage( ( size[0] / 10, size[1] / 10), im.depth, im.nChannels) cv.Resize(im, thumbnail)

Espero que esto ayude ;)

Julien


Si desea usar CV2, necesita usar la función de cambio de resize .

Por ejemplo, esto cambiará el tamaño de ambos ejes a la mitad:

small = cv2.resize(image, (0,0), fx=0.5, fy=0.5)

y esto redimensionará la imagen para tener 100 cols (ancho) y 50 filas (alto):

resized_image = cv2.resize(image, (100, 50))

Otra opción es usar el módulo scipy , usando:

small = scipy.misc.imresize(image, 0.5)

Obviamente hay más opciones que puede leer en la documentación de esas funciones ( cv2.resize , scipy.misc.imresize ).