Maison >développement back-end >Tutoriel Python >Comment recadrer des images dans OpenCV à l'aide de Python : Numpy Slicing vs getRectSubPix ?

Comment recadrer des images dans OpenCV à l'aide de Python : Numpy Slicing vs getRectSubPix ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 18:12:17727parcourir

How to Crop Images in OpenCV Using Python: Numpy Slicing vs. getRectSubPix?

Comment recadrer des images dans OpenCV à l'aide de Python

Dans le traitement d'image, le recadrage est une opération fondamentale pour extraire des régions spécifiques d'une image. OpenCV, une bibliothèque de vision par ordinateur populaire en Python, fournit diverses méthodes de recadrage, notamment le découpage numpy et des fonctions telles que getRectSubPix.

Utiliser le découpage numpy pour le recadrage

Le plus simple et L'approche la plus simple pour recadrer des images dans OpenCV consiste à utiliser le découpage numpy. Les tableaux Numpy représentent des images dans OpenCV et vous pouvez accéder à des régions spécifiques du tableau à l'aide d'opérations de découpage.

import cv2

# Read the original image
img = cv2.imread("image.jpg")

# Crop a region using numpy slicing
cropped_img = img[y:y+h, x:x+w]

# Display the cropped image
cv2.imshow('Cropped Image', cropped_img)
cv2.waitKey(0)

Utilisation de getRectSubPix pour le recadrage

Dans certains scénarios, tels que comme lorsqu'un recadrage précis de sous-pixels est requis, la fonction getRectSubPix d'OpenCV peut être utilisée. Il extrait une partie rectangulaire de l'image tout en interpolant les valeurs des pixels.

import cv2

# Read the original image
img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

# Crop a region using getRectSubPix
cropped_img = cv2.getRectSubPix(img, (w, h), (x, y))

# Display the cropped image
cv2.imshow('Cropped Image', cropped_img)
cv2.waitKey(0)

Exemple de code (PIL vs. OpenCV)

Pour illustrer la différence entre PIL et OpenCV, créons un exemple similaire à celui fourni dans le question.

PIL :

import PIL.Image as Image

im = Image.open('0.png').convert('L')
im = im.crop((1, 1, 98, 33))
im.save('_0.png')

OpenCV :

import cv2

# Read the image
img = cv2.imread('0.png', cv2.IMREAD_GRAYSCALE)

# Crop the image using numpy slicing
cropped_img = img[1:33, 1:98]

# Save the cropped image
cv2.imwrite('_0.png', cropped_img)

Dans cet exemple, OpenCV utilise le découpage numpy pour recadrer l'image spécifiée par les coordonnées (1, 1, 98, 33). L'image recadrée résultante est enregistrée sous '_0.png.'

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn