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 que no fue un 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.
Respuestas:
Si desea usar CV2, debe usar la
resize
función.Por ejemplo, esto redimensionará ambos ejes a la mitad:
y esto redimensionará la imagen para que tenga 100 cols (ancho) y 50 filas (alto):
Otra opción es usar el
scipy
módulo, usando:Obviamente, hay más opciones que puede leer en la documentación de esas funciones ( cv2.resize , scipy.misc.imresize ).
Actualización: de
acuerdo con la documentación de SciPy :
Tenga en cuenta que si está buscando cambiar el tamaño por un factor , es posible que desee
skimage.transform.rescale
.fuente
Ejemplo duplicando el tamaño de la imagen
Hay dos formas de cambiar el tamaño de una imagen. Se puede especificar el nuevo tamaño:
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 reducir una imagen, generalmente se verá mejor con la 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 reducción de imagen para ajustarse a una altura / anchura máxima (manteniendo la relación de aspecto)
Usando su código con cv2
fuente
src = cv2.imread('YOUR_PATH_TO_IMG')
y editaste 'YOUR_PATH_TO_IMG' en la ruta de tu propia imagen?cv2.resize
de forma automática utiliza el relleno? ¿Cuál es el tamaño de la ventana que se crea usando el tamaño de salida deseado(width/10, height/10)
?Puede usar la función GetSize para obtener esa información, cv.GetSize (im) devolvería una tupla con el ancho y la altura 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 intentar trabajar con el mismo tipo de datos:
Espero que esto ayude ;)
Julien
fuente
fuente
cv2.resize
de forma automática utiliza el relleno? ¿Cuál es el tamaño de la ventana que se crea utilizando(w, target_height)
argumentos?Aquí hay una función para aumentar o disminuir la escala de una imagen según el ancho o la altura deseados mientras se mantiene la relación de aspecto
Uso
Usando esta imagen de ejemplo
Simplemente reducir a
width=100
(izquierda) o aumentar awidth=300
(derecha)fuente