opencv中如何將影像覆蓋到另一個影像的特定部分

WBOY
發布: 2024-02-05 22:09:11
轉載
414 人瀏覽過

opencv中如何將影像覆蓋到另一個影像的特定部分

問題內容

我有下面的圖像,我想在圖像的最右側覆蓋一個黑色補丁。因此,我在下面的程式碼中將兩個圖像的大小調整為特定大小,並僅獲取覆蓋層的非白色部分並將其貼到特定的 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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!