0
votes

Quelle est la meilleure façon de couper la pièce maîtresse d'une image?

J'ai actuellement une image carrée que je souhaite utiliser comme entrée de My ResNet50 avec les dimensions 576x576 et j'essaie uniquement de disposer du carré central de cette image. En d'autres termes, découpez une bordure autour du centre de l'image. Existe-t-il une façon de le faire en seulement avoir à définir la largeur de la découpe (en pixels)?


3 commentaires

Quels sont vos outils pour la lecture de l'image? Quelle est votre commande du canal d'image? c h w ou h w c ou quelque chose d'autre


J'utilise opencv (par exemple cv2.imread). L'ordre du canal est: H w c


La question n'a rien à voir avec la machine-apprentissage - veuillez ne pas spamner non plus des balises non pertinentes (supprimées).


3 Réponses :


0
votes

Vous pouvez par exemple faire quelque chose comme ceci:

import numpy as np
start_width = 576
center_width = 100

start_image = np.random.rand(start_width,start_width,3)
# With open CV:
# start_image = cv2.imread("your_file",mode='RGB')
# start_width = start_image.shape[0]
center_image_start_idx = int((start_width-center_width)/2)

center_image = start_image[
        center_image_start_idx:(center_image_start_idx+center_width),
        center_image_start_idx:(center_image_start_idx+center_width),:]

print(start_image.shape)
print(center_image.shape)

# Which outputs:
> (576, 576, 3)
> (100, 100, 3)


2 commentaires

Donc, je lis l'image avec: img_array = cv2.imread (img.imread (img.imread) et à l'aide de votre code comme: centre_image [img_array] et obtenir le message d'erreur: < Code> IndexError: L'index 184 est hors limites pour l'axe 0 avec la taille 100


@Omartekin J'ai écrit la solution avant que je ne connaisse que vous avez une image CV2, donc j'ai fait une solution générale. Mise à jour du code de telle sorte qu'il fonctionne aussi avec CV2 (voir les commentaires dans le code). Mais puisque vous utilisez CV2, vous devez probablement simplement utiliser les fonctions prises en charge CV2 telles que Mohammad_el_assal suggérées.



0
votes
from PIL import Image
img = Image.open("ImageName.jpg") # or any format you want
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.save("ImageName2.jpg", "JPEG") # or any format you want, even diifferent than the original format.
cropped_img.show()
this is a method to crop. define your own algorithim to solve your problem.

0 commentaires

0
votes

Supposons new_h code> et new_w code> sont votre hauteur et votre largeur d'objectif.

org_h, org_w, _ = img.shape
crop_img = img[org_h//2 - new_h//2:org_h//2 + new_h, org_w//2 - new_w//2:org_w//2 + new_w,:]


0 commentaires