【python】OpenCV—Merge Image

发布于:2024-06-06 ⋅ 阅读:(162) ⋅ 点赞:(0)

在这里插入图片描述

np.hstack / np.vstack

利用 numpy 的 hstack 和 vstack,对图片进行拼接

import cv2
import numpy as np

h, w = 256,256
img1 = cv2.resize(cv2.imread("1.jpg"), (w, h))
img2 = cv2.resize(cv2.imread("2.png"), (w, h))

horizontal = np.hstack((img1, img2))
cv2.imwrite("horizontal.jpg", horizontal)

vertical = np.vstack((img1, img2))
cv2.imwrite("vertical.jpg", vertical)

输入图片
在这里插入图片描述
在这里插入图片描述

horizontal

在这里插入图片描述

vertical

在这里插入图片描述

Slice

学习来自 Python 图像合并:利用 OpenCV 的强大功能

图片 reszie 成同样大小,生成空白图,利用切片,给相应区域赋值

import cv2
import numpy as np

dimension = 256
canvas_dimension = 2 * dimension

img1 = cv2.resize(cv2.imread("1.png"), (dimension, dimension))
img2 = cv2.resize(cv2.imread("2.png"), (dimension, dimension))
img3 = cv2.resize(cv2.imread("3.png"), (dimension, dimension))
img4 = cv2.resize(cv2.imread("4.png"), (dimension, dimension))

canvas = np.zeros((canvas_dimension, canvas_dimension, 3), dtype=np.uint8)

canvas[0:dimension, 0:dimension] = img1
canvas[0:dimension, dimension:canvas_dimension] = img2
canvas[dimension:canvas_dimension, 0:dimension] = img3
canvas[dimension:canvas_dimension, dimension:canvas_dimension] = img4

# cv2.imwrite("merge.jpg", canvas)
cv2.imshow("merge", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

输入图片1
在这里插入图片描述

输入图片2
在这里插入图片描述

输入图片3
在这里插入图片描述

输入图片4
在这里插入图片描述

合并结果
在这里插入图片描述

cv2.addWeighted

import cv2
w, h = 960, 540
img1 = cv2.resize(cv2.imread("1.jpg"), (w, h))
img2 = cv2.resize(cv2.imread("2.jpg"), (w, h))
merge = cv2.addWeighted(img1, 0.7, img2, 0.3, gamma=.0)
cv2.imwrite("merge.jpg", merge)

输入1

在这里插入图片描述

输入2

在这里插入图片描述

输出

在这里插入图片描述

自定义渐变式叠加

Python国庆头像制作

渐变透明度叠加

原图

在这里插入图片描述

在这里插入图片描述

from PIL import Image

flag = Image.open('1.png').convert("RGBA")
avatar = Image.open('2.jpg').convert("RGBA")

flag = flag.resize(avatar.size)

for i in range(flag.size[0]):
    for j in range(flag.size[1]):
        r, g, b, _ = flag.getpixel((i, j))
        alpha = max(0, 255 - i // 5 - j // 7) # 核心代码,左上角到右下角越来越透明
        # 重新填充像素
        flag.putpixel((i, j), (r, g, b, alpha))

avatar.paste(flag, (0, 0), flag)
avatar.save('flag_avatar.png')

叠加后的效果

在这里插入图片描述

cv2.bitwise_not / cv2.bitwise_and / cv2.add

可以参考 【python】OpenCV—Paste Mask

A 图

请添加图片描述

A 图的 mask 标签

请添加图片描述
B 图

请添加图片描述
合并的结果
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到