Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用OpenCV混合多个图像_Python_Image_Opencv - Fatal编程技术网

Python 使用OpenCV混合多个图像

Python 使用OpenCV混合多个图像,python,image,opencv,Python,Image,Opencv,使用python将多个图像与OpenCV混合的方法是什么?我遇到了以下片段: img = cv2.addWeighted(mountain, 0.3, dog, 0.7, 0) 在 这显示了一种混合两幅图像的方法mountain和dog。如果我想混合两个以上的图像呢?我怎么能这样做 您可以根据以下顺序混合所有图像: 混合前两个图像 将结果与下一幅图像混合 诸如此类 每个图像的权重可能有问题,但这是另一个问题。要使所有图像的强度相等,可以使用索引计算适当的部分: for idx, img in

使用python将多个图像与OpenCV混合的方法是什么?我遇到了以下片段:

img = cv2.addWeighted(mountain, 0.3, dog, 0.7, 0) 


这显示了一种混合两幅图像的方法
mountain
dog
。如果我想混合两个以上的图像呢?我怎么能这样做

您可以根据以下顺序混合所有图像:

  • 混合前两个图像
  • 将结果与下一幅图像混合
  • 诸如此类
  • 每个图像的权重可能有问题,但这是另一个问题。要使所有图像的强度相等,可以使用索引计算适当的部分:

    for idx, img in enumerate(imgs):
        if idx == 1:
            first_img = img
            continue
        else:
            second_img = img
            second_weight = 1/(idx+1)
            first_weight = 1 - second_weight
            first_img = cv2.addWeighted(first_img, first_weight, second_img, second_weight, 0)
    

    您可以根据以下顺序混合所有图像:

  • 混合前两个图像
  • 将结果与下一幅图像混合
  • 诸如此类
  • 每个图像的权重可能有问题,但这是另一个问题。要使所有图像的强度相等,可以使用索引计算适当的部分:

    for idx, img in enumerate(imgs):
        if idx == 1:
            first_img = img
            continue
        else:
            second_img = img
            second_weight = 1/(idx+1)
            first_weight = 1 - second_weight
            first_img = cv2.addWeighted(first_img, first_weight, second_img, second_weight, 0)
    
    试试这个:

    blendedImage=weight_1*image_1+weight_2*image_2+…+权重*image\n

    试试这个:


    blendedImage=weight_1*image_1+weight_2*image_2+…+权重*image\n

    下面是将多个图像混合到一个列表中的Python代码。我使用了沙姆谢尔答案中的基本公式

    首先,让我们得到三张图片

    将numpy导入为np
    进口cv2
    将matplotlib.pyplot作为plt导入
    将matplotlib.image导入为mpimg
    尺寸=(425425)
    apple=mpimg.imread('apple.jpg')
    苹果=cv2。调整大小(苹果,尺寸)
    banana=mpimg.imread('banana.jpg')
    香蕉=cv2。调整大小(香蕉,变暗)
    orange=mpimg.imread('orange.jpg')
    橙色=cv2。调整大小(橙色,暗淡)
    _=plt.imshow(苹果)
    _=plt.show()
    _=plt.imshow(香蕉)
    _=plt.show()
    _=plt.imshow(橙色)
    _=plt.show()
    
    以下是图片:

    现在让我们把它们均匀地混合在一起。由于有三个图像,因此每个图像对最终输出的贡献分数为0.333

    def混合(列出图像):#均匀混合图像。
    等分=1.0/(透镜(列表图像))
    输出=np.zeros_like(列表图像[0])
    对于列表_图像中的img:
    输出=输出+img*相等分数
    output=output.astype(np.uint8)
    返回输出
    列表图片=[苹果、香蕉、橙色]
    输出=混合(列出图像)
    _=plt.imshow(输出)
    
    结果如下:


    下面是将多个图像混合到一个列表中的Python代码。我使用了沙姆谢尔答案中的基本公式

    首先,让我们得到三张图片

    将numpy导入为np
    进口cv2
    将matplotlib.pyplot作为plt导入
    将matplotlib.image导入为mpimg
    尺寸=(425425)
    apple=mpimg.imread('apple.jpg')
    苹果=cv2。调整大小(苹果,尺寸)
    banana=mpimg.imread('banana.jpg')
    香蕉=cv2。调整大小(香蕉,变暗)
    orange=mpimg.imread('orange.jpg')
    橙色=cv2。调整大小(橙色,暗淡)
    _=plt.imshow(苹果)
    _=plt.show()
    _=plt.imshow(香蕉)
    _=plt.show()
    _=plt.imshow(橙色)
    _=plt.show()
    
    以下是图片:

    现在让我们把它们均匀地混合在一起。由于有三个图像,因此每个图像对最终输出的贡献分数为0.333

    def混合(列出图像):#均匀混合图像。
    等分=1.0/(透镜(列表图像))
    输出=np.zeros_like(列表图像[0])
    对于列表_图像中的img:
    输出=输出+img*相等分数
    output=output.astype(np.uint8)
    返回输出
    列表图片=[苹果、香蕉、橙色]
    输出=混合(列出图像)
    _=plt.imshow(输出)
    
    结果如下:


    如何使用混合图像的结果并将其与另一个图像混合?如何使用混合图像的结果并将其与另一个图像混合?理想情况下,您希望每个图像都有一个部分贡献,对应于被混合的图像数(在本例中为1/9),而不是一半。我想到一个计数器变量,用来计算正确的部分。干得好。一些人可能对这篇文章感兴趣,这篇文章说明了平均值,特别是在PHOTOSHOP中使用LAYERS@SimonFink算法仍然没有达到预期的效果。第一个图像的权重应为1/9,然后与其他图像一起添加时,您将使用第一个图像(权重1),每隔一个图像的权重为1/9。@Croolman如果您有一层,则使用所有图像(100%)。如果你有两层,你希望底层在100%,第二层在50%(1/2)以上,那么在最终的结果中,你将得到每层的一半。如果有3层,则取顶层的33%(1/3),然后取其他2/3,即之前从2层图像中得到的,即底部和第一层各占一半,并且占据剩余的2/3,这将对应于底部2层各占1/3。因此,您希望每个新层的比例N为1/(N+1)。理想情况下,您希望每个图像的部分贡献与被混合的图像数量(在本例中为1/9)相对应,而不是一半。我想到了一个计数器变量,用于计算正确的部分。做得好。一些人可能对这篇文章感兴趣,这篇文章说明了平均值,特别是在PHOTOSHOP中使用LAYERS@SimonFink算法仍然没有达到预期的效果。第一个图像的权重应为1/9,然后与其他图像一起添加时,您将使用第一个图像(权重1),每隔一个图像的权重为1/9。@Croolman如果您有一层,则使用所有图像(100%)。如果你有两层,你希望底层在100%,第二层在50%(1/2)以上,那么在最终的结果中,你将得到每层的一半。如果有3层,则取顶层的33%(1/3),然后取其他2/3,即之前从2层图像中得到的,即底部和fir的一半