Je souhaite utiliser OpenCV2.0 et Python2.6 pour afficher des images redimensionnées. J'ai utilisé et adopté l'exemple à http://opencv.willowgarage.com/documentation/python/cookbook.html mais malheureusement ce code est pour OpenCV2.1 et ne semble pas fonctionner sur 2.0. Voici mon code:
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)
Puisque je ne peux pas utiliser
cv.LoadImageM
j'ai utilisé
cv.LoadImage
au lieu de cela, ce qui ne posait aucun problème dans d'autres applications. Néanmoins cv.iplimage n'a pas de lignes d'attributs, de colonnes ou de taille. Quelqu'un peut-il me donner un indice, comment résoudre ce problème? Merci.
Réponses:
Si vous souhaitez utiliser CV2, vous devez utiliser la
resize
fonction.Par exemple, cela redimensionnera les deux axes de moitié:
et cela redimensionnera l'image pour avoir 100 cols (largeur) et 50 lignes (hauteur):
Une autre option consiste à utiliser le
scipy
module, en utilisant:Il y a évidemment plus d'options que vous pouvez lire dans la documentation de ces fonctions ( cv2.resize , scipy.misc.imresize ).
Mise à jour:
selon la documentation SciPy :
Notez que si vous cherchez à redimensionner par un facteur , vous voudrez peut-être
skimage.transform.rescale
.la source
Exemple de doublement de la taille de l'image
Il existe deux façons de redimensionner une image. La nouvelle taille peut être spécifiée:
Manuellement;
height, width = src.shape[:2]
dst = cv2.resize(src, (2*width, 2*height), interpolation = cv2.INTER_CUBIC)
Par un facteur d'échelle.
dst = cv2.resize(src, None, fx = 2, fy = 2, interpolation = cv2.INTER_CUBIC)
, où fx est le facteur de mise à l'échelle le long de l'axe horizontal et fy le long de l'axe vertical.Pour réduire une image, elle sera généralement meilleure avec l'interpolation INTER_AREA, tandis que pour agrandir une image, elle sera généralement meilleure avec INTER_CUBIC (lent) ou INTER_LINEAR (plus rapide mais semble toujours OK).
Exemple d'image réduite pour s'adapter à une hauteur / largeur maximale (en conservant le rapport hauteur / largeur)
Utiliser votre code avec cv2
la source
src = cv2.imread('YOUR_PATH_TO_IMG')
et édité le 'YOUR_PATH_TO_IMG' sur le chemin de votre propre image?cv2.resize
n'utilise automatiquement le rembourrage? quelle est la taille de la fenêtre créée en utilisant la taille de sortie souhaitée(width/10, height/10)
?Vous pouvez utiliser la fonction GetSize pour obtenir ces informations, cv.GetSize (im) renverrait un tuple avec la largeur et la hauteur de l'image. Vous pouvez également utiliser im.depth et img.nChan pour obtenir plus d'informations.
Et pour redimensionner une image, j'utiliserais un processus légèrement différent, avec une autre image au lieu d'une matrice. Il vaut mieux essayer de travailler avec le même type de données:
J'espère que cela t'aides ;)
Julien
la source
la source
cv2.resize
n'utilise automatiquement le rembourrage? quelle est la taille de la fenêtre créée à l'aide d'(w, target_height)
arguments?Voici une fonction pour augmenter ou réduire une image de la largeur ou de la hauteur souhaitée tout en conservant le rapport hauteur / largeur
Usage
Utilisation de cette image d'exemple
Réduisez simplement l'échelle vers
width=100
(gauche) ou augmentez l'échelle verswidth=300
(droite)la source