Heim >Backend-Entwicklung >Python-Tutorial >So überlagern Sie ein Bild mit einem bestimmten Teil eines anderen Bildes in opencv
Ich habe das Bild unten und möchte ganz rechts im Bild einen schwarzen Fleck überlagern. Daher verändere ich die Größe beider Bilder im folgenden Code auf eine bestimmte Größe, erhalte nur den nicht weißen Teil der Überlagerung und füge ihn an bestimmten XY-Koordinaten ein, erhalte jedoch nicht das erwartete Ergebnis. Ich habe gesucht cv2.addweighted
, aber keine Option zum Angeben der Option zur Verwendung der Koordinaten der Einfügeüberlagerung gefunden.
Kann mir jemand helfen, wie ich das in cv2 implementieren kann?
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()
Erwartete Ergebnisse:
Dies ist eine Möglichkeit, dies in Python/OpenCV zu tun.
(Mir ist aufgefallen, dass das von Ihnen gepostete Bild nicht die von Ihnen angegebene Größe hat, insbesondere der Farbverlauf. Daher ist eine zusätzliche Verarbeitung erforderlich, um die Größe des Bildes anzupassen. Außerdem hat das Farbverlaufsbild einen weißen Rand, was Sie wahrscheinlich nicht wünschen.)
Geben Sie ein:
Verlauf (mit weißem Rand):
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)
Das obige ist der detaillierte Inhalt vonSo überlagern Sie ein Bild mit einem bestimmten Teil eines anderen Bildes in opencv. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!