Redimensionner une image sans distorsion OpenCV
Je suis à l'aide de python 3 et la dernière version d'openCV. Je suis en train de redimensionner une image à l'aide de la fonction de redimensionnement donnés, mais après redimensionnement de l'image est très déformée. Code :
import cv2
file = "/home/tanmay/Desktop/test_image.png"
img = cv2.imread(file , 0)
print(img.shape)
cv2.imshow('img' , img)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyWindow('img')
resize_img = cv2.resize(img , (28 , 28))
cv2.imshow('img' , resize_img)
x = cv2.waitKey(0)
if x == 27:
cv2.destroyWindow('img')
L'image d'origine est de 480 x 640 (RVB donc j'ai passé le 0 à niveaux de gris)
Est-il possible de le redimensionner et éviter la distorsion à l'aide d'OpenCV ou toute autre bibliothèque peut-être? J'ai l'intention de faire un manuscrites chiffres logiciel de reconnaissance et j'ai formé mon réseau de neurones utilisant les données MNIST donc j'ai besoin de l'image pour être 28x28.
- Sans aucune distorsion, vous avez 2 options: a) des cultures de la partie de l'image pour qu'elle le même aspect. b) ajouter une partie de l'image (par exemple, les pixels noirs) sur les côtés des images pour en faire le même aspect. Si vous n'avez pas le même rapport d'aspect, il ne sera pas possible de l'obtenir sans distorsion.
- Vous devez vous assurer que le ratio d'aspect de la nouvelle dimension de passe est le même que l'image d'origine et assurez-vous que vous utilisez un adapté de la méthode d'interpolation
- J'ai ajouté les pixels noirs de l'image d'origine pour en faire 640x640 mais encore quand j'redimensionner, je reçois une image déformée. Que puis-je faire ?
- La spécification de l'interpolation, il fixe. Merci.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ci-dessous. La fonction de garder l'aspect taux de l'image d'origine.
Voici un exemple d'utilisation.
Espère que cette aide.
cv2.resize(image, (28,28), interpolation = inter)
.Si vous avez besoin de modifier la résolution de l'image et de garder votre ratio d'aspect de l'utilisation de la fonction imutils (voir la documentation). quelque chose comme ceci:
espère que ça aide, bonne chance !
La réponse, fournie par @vijay jai est trop spécifique. Comprend un ajout inutile de rembourrage. Je propose fixe code ci-dessous:
Le code redimensionne une image carrée et en gardant l'aspect ratio en même temps. Le code est adapté pour 3 canaux (en couleur) des images.
Exemple d'utilisation:
Essayez ce simple fonction en python qui utilise opencv. il suffit de passer l'image et à la mention de la taille des carrés que vous voulez.
utilisation:
squared_image=get_square(image 28)
explication:
fonction prend en entrée de n'importe quelle taille et il crée une forme rectangulaire vide de l'image d'une taille supérieure à l'entrée de l'image en hauteur et en largeur.
il place ensuite l'image d'origine au centre de l'image vide. et puis il redimensionne cette place de l'image dans la taille désirée de sorte que la forme de l'image d'origine contenu est préservé.
espoir ,cela vous aidera à
J'ai un jeu de données de dessins à main levée et j'avais besoin de créer de petites images carrées de dessins asymétriques.
Grâce à @vijay jai j'ai créé images carrées tout en maintenant le ratio d'aspect de l'image d'origine. Une question toutefois que plus vous revus à la baisse plus l'information a été perdu.
512x256 à 64x64 devrait ressembler à ceci:
J'ai modifié un peu la code d'origine douceur, de réduire la taille de l'image.
512x256 -> 64x64
512x256 -> 28x28
redimensionner l'image à la moitié de la taille d'origine. Vous pouvez le modifier pour tout autre rapport.
Notez que le premier argument passé à redimensionner() est img.la forme[1], et non pas d'img.de la forme[0]. Cela peut être contre-intuitif. Il est facile d'oublier ce revers et une image déformée.
Le code est donné un
window_height
par lequel il calcule lawindow_width
variable, tout en maintenant le ratio d'aspect de l'image. Afin de prévenir de toute distorsion.Peut pas citer les aligner avec ce que l'original qui est demandé, mais j'ai atterri ici à la recherche d'une réponse à une question similaire.