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:
A mano;
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
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 ).