L'extraction d'une région à partir d'une image à l'aide de découpage en Python, OpenCV
J'ai une image et je veux extraire une région à partir d'elle. J'ai les coordonnées du coin supérieur gauche et le coin inférieur droit de cette région. Dans une échelle de gris, je fais comme ça:
I = cv2.imread("lena.png")
I = cv2.cvtColor(I, cv2.COLOR_RGB2GRAY)
region = I[248:280,245:288]
tools.show_1_image_pylab(region)
Je peux pas comprendre comment le faire en couleur. J'ai pensé à l'extraction de chaque canal R, G, B; le découpage de cette région à partir de chacun des canaux et de les fusionner ensemble mais il doit bien y avoir un moyen plus court.
- Cela devrait fonctionner pour la couleur de l'image également.
- l'essayer avant de convertir l'image en niveaux de gris
- également, visualiser l'image à l'aide de cv2.imshow() fonction.
- Rahman K j'ai essayé et ici est l'effet les Couleurs sont fausses. Je soupçonne que c'est juste l'un des canaux.
- Vous pourriez peut-être utiliser les
GetRectSubPix()
pour obtenir de la région au lieu de le trancher. - Je l'ai juste testé. Et j'ai eu de la couleur de l'image elle-même. Affichage de l'image à l'aide de cv2.imshow() de la fonction, pas tout pylab ou matplotlib fonction, c'est juste affiché dans une couleur différente de la carte en eux.
- Et si vous avez un doute, vérifiez-région.la forme et assurez-vous qu'il est au format
[rows,cols,3]
. - Vous avez raison! Je suis confus par la couleur différente. Merci pour votre aide!
Vous devez vous connecter pour publier un commentaire.
Il y a une légère différence en pixel de la commande dans OpenCV et Matplotlib.
OpenCV suit BGR l'ordre, tandis que matplotlib probablement suit RVB commande.
Ainsi, lorsque vous affichez une image chargée dans OpenCV à l'aide de pylab fonctions, vous devrez peut-être convertir en mode RVB. ( Je ne suis pas sûr qu'une méthode facile est là). Méthode ci-dessous le démontrent:
NB : vérifiez @Amro s 'commentaire ci-dessous pour une meilleure méthode de conversion entre BGR et RVB.
img2 = img[:,:,::-1]
. Très simple.D'exécuter ce code et de voir la différence entre le résultat vous-même. Ci-dessous est ce que j'ai :
À L'Aide De Matplotlib :
À L'Aide D'OpenCV :
img2 = img[:,:,::-1]
pour inverser les couleurs de la dimension de BGR RVB (en utilisant seulement les NumPy indexation)cv2.cvtColor
aveccv2.COLOR_BGR2RGB
drapeau.cv2.imshow = lambda _, y: plt.imshow(y[:,:,::-1]).figure
img2 = img[::,::-1]
2 plus d'options non encore mentionné:
et polyvalent, le