Bagaimana untuk menindih imej ke bahagian tertentu imej lain dalam opencv

WBOY
Lepaskan: 2024-02-05 22:09:11
ke hadapan
474 orang telah melayarinya

Bagaimana untuk menindih imej ke bahagian tertentu imej lain dalam opencv

Kandungan soalan

Saya mempunyai imej di bawah dan saya mahu menindih tampalan hitam di bahagian paling kanan imej. Jadi saya mengubah saiz kedua-dua imej kepada saiz tertentu dalam kod di bawah dan hanya mendapat bahagian bukan putih tindanan dan menampalnya pada koordinat x,y tertentu tetapi tidak mendapat hasil yang diharapkan. Saya mencari cv2.addweighted tetapi tidak menemui sebarang pilihan untuk menentukan pilihan untuk menggunakan koordinat tindanan tampal. Bolehkah sesiapa membimbing saya tentang cara melaksanakan ini dalam 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()
Salin selepas log masuk

Hasil yang dijangkakan:


Jawapan betul


Berikut adalah satu cara untuk melakukannya dalam python/opencv.

(Saya perasan bahawa imej yang anda siarkan bukan saiz yang anda katakan, terutamanya kecerunan. Jadi pemprosesan tambahan diperlukan untuk memadankan saiz imej. Juga imej kecerunan mempunyai sempadan putih, yang saya ragu anda mahu.)

Masukkan:

Kecerunan (dengan sempadan putih):

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)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menindih imej ke bahagian tertentu imej lain dalam opencv. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan