我有下面的圖像,我想在圖像的最右側覆蓋一個黑色補丁。因此,我在下面的程式碼中將兩個圖像的大小調整為特定大小,並僅獲取覆蓋層的非白色部分並將其貼到特定的 x,y 座標上,但沒有得到預期的結果。我查看了 cv2.addweighted
但沒有找到任何選項來指定選項使用貼上覆蓋層的座標。
有人可以指導如何在 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()
預期結果:
這是在 python/opencv 中執行此操作的一種方法。
(我注意到您發布的圖像不是您所說的尺寸,尤其是漸變。因此需要額外的處理來匹配圖像的尺寸。而且漸變圖像有一個白色邊框,我懷疑您想要. )
輸入:
漸層(有白色邊框):
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)
以上是opencv中如何將影像覆蓋到另一個影像的特定部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!