gpt4 book ai didi

python - OpenCV 合成 2 张不同大小的图像

转载 作者:行者123 更新时间:2023-11-30 22:19:50 28 4
gpt4 key购买 nike

我需要对 2 个大小不同的图像进行 alpha 混合。我已经设法通过将大小调整为相同大小来将它们组合起来,因此我已经得到了部分逻辑:

import cv2 as cv

def combine_two_color_images_composited(foreground_image, background_image):

foreground = cv.resize(foreground_image, (400,400), interpolation=cv.INTER_CUBIC).copy()
background = cv.resize(background_image, (400,400), interpolation=cv.INTER_CUBIC).copy()
alpha =0.5
# do composite of foreground onto the background
cv.addWeighted(foreground, alpha, background, 1 - alpha, 0, background)

cv.imshow('composited image', background)
cv.waitKey(10000)

我想知道是否需要制作一个与较大图像大小相同的蒙版,然后将其与我的第一个图像一起使用。如果是这样,我还不知道如何在 OpenCV 中进行屏蔽……这只是我项目的一小部分,所以我无法花费大量时间研究屏蔽的工作原理。

我已经搜索遍了,但我找到的代码可以执行诸如将图像“添加”在一起(并排)之类的操作。

最佳答案

要合并两个图像,您可以使用 numpy 切片来选择背景图像中要混合前景的部分,然后再次将新混合的部分插入背景中。

import cv

def combine_two_color_images(image1, image2):

foreground, background = image1.copy(), image2.copy()

foreground_height = foreground.shape[0]
foreground_width = foreground.shape[1]
alpha =0.5

# do composite on the upper-left corner of the background image.
blended_portion = cv.addWeighted(foreground,
alpha,
background[:foreground_height,:foreground_width,:],
1 - alpha,
0,
background)
background[:foreground_height,:foreground_width,:] = blended_portion
cv.imshow('composited image', background)

cv.waitKey(10000)

编辑:要将前景放置在指定位置,请使用 numpy indexing像之前一样。 Numpy 索引非常强大,您会发现它在很多情况下都很有用。我链接了上面的文档。确实值得一看。

def combine_two_color_images_with_anchor(image1, image2, anchor_y, anchor_x):
foreground, background = image1.copy(), image2.copy()
# Check if the foreground is inbound with the new coordinates and raise an error if out of bounds
background_height = background.shape[0]
background_width = background.shape[1]
foreground_height = foreground.shape[0]
foreground_width = foreground.shape[1]
if foreground_height+anchor_y > background_height or foreground_width+anchor_x > background_width:
raise ValueError("The foreground image exceeds the background boundaries at this location")

alpha =0.5

# do composite at specified location
start_y = anchor_y
start_x = anchor_x
end_y = anchor_y+foreground_height
end_x = anchor_x+foreground_width
blended_portion = cv.addWeighted(foreground,
alpha,
background[start_y:end_y, start_x:end_x,:],
1 - alpha,
0,
background)
background[start_y:end_y, start_x:end_x,:] = blended_portion
cv.imshow('composited image', background)

cv.waitKey(10000)

关于python - OpenCV 合成 2 张不同大小的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979219/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com