Maison > développement back-end > Tutoriel Python > Comment superposer une image sur une partie spécifique d'une autre image dans opencv

Comment superposer une image sur une partie spécifique d'une autre image dans opencv

WBOY
Libérer: 2024-02-05 22:09:11
avant
548 Les gens l'ont consulté

Comment superposer une image sur une partie spécifique dune autre image dans opencv

Contenu de la question

J'ai l'image ci-dessous et je souhaite superposer une tache noire à l'extrême droite de l'image. Je redimensionne donc les deux images à une taille spécifique dans le code ci-dessous et j'obtiens uniquement la partie non blanche de la superposition et je la colle à des coordonnées x, y spécifiques, mais je n'obtiens pas le résultat attendu. J'ai regardé cv2.addweighted mais je n'ai trouvé aucune option pour spécifier l'option d'utiliser les coordonnées de la superposition de collage. Quelqu'un peut-il me guider sur la façon de mettre en œuvre cela dans cv2 ?

vr_overlay = "/Users/templates/vertical_overlay.png"

show_image = "/Users/templates/image_3.png"

vr_overlay_co = (0, 0, 100, 412)
img_size = (0, 0, 440, 412)

img = cv2.imread(show_image)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

v_overlay = cv2.imread(vr_overlay)

resize_v_overlay = cv2.resize(v_overlay, (vr_overlay_co[2], vr_overlay_co[3]))

plt.imshow(resize_v_overlay ,cmap='gray')
plt.axis('off')
plt.show()

resize_img = cv2.resize(img_rgb, (img_size[2], img_size[3]))

plt.imshow(resize_img ,cmap='gray')
plt.axis('off')
plt.show()
resize_img[vr_overlay_co[1]: vr_overlay_co[1] + 
           vr_overlay_co[3],vr_overlay_co[0]: vr_overlay_co[0] + 
           vr_overlay_co[2]] = np.where(resize_v_overlay != [0, 0, 0],
                                        resize_img[vr_overlay_co[1]: vr_overlay_co[1] 
                                                   + vr_overlay_co[3], vr_overlay_co[0]: 
                                                   vr_overlay_co[0] + vr_overlay_co[2],], resize_v_overlay)



plt.imshow(resize_img ,cmap='gray')
plt.axis('off')
plt.show()
Copier après la connexion

Résultats attendus :


Réponse correcte


C'est une façon de le faire en python/opencv.

(J'ai remarqué que l'image que vous avez publiée n'a pas la taille que vous avez indiquée, en particulier le dégradé. Un traitement supplémentaire est donc nécessaire pour correspondre à la taille de l'image. L'image dégradée a également une bordure blanche, ce que je doute que vous souhaitiez.)

Entrez :

Dégradé (avec bordure blanche) :

import cv2
import numpy as np

# read the image
img = cv2.imread('people.png')
hh, ww = img.shape[:2]

# read the small gradient
grad = cv2.imread('small_gradient.png')
hg, wg = grad.shape[:2]

# create white image the size of the image
# then insert gradient on right side while trimming off excess white from right side of gradient
ox = ww-wg+1
grad2 = np.full_like(img, (255,255,255))
grad2[0:hh, ox:ww-9+1] = grad[0:hg-1, 0:wg-9]

# blend the img with grad2 via multiply
#result = img.astype(np.float32) * grad2.astype(np.float32) / 255
#result = result.clip(0,255).astype(np.uint8)
#or
scale = 1/255
result = cv2.multiply(img, grad2, scale=scale)

# save results
cv2.imwrite('people_gradient.png', result)

# show results
cv2.imshow('result', result)
cv2.waitKey(0)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal