python实现两张图片拼接

纵向拼接

from PIL import Image


def image_splicing(pic01, pic02):
    """
    图片拼接
    :param pic01: 图片1路径
    :param pic02: 图片2路径
    :return: 保存路径
    """
    with Image.open(pic01) as img_01, \
            Image.open(pic02) as img_02:
        img1_size, img2_size = img_01.size, img_02.size
        width = max([img1_size[0], img2_size[0]])
        height = img1_size[1] + img2_size[1]
        instance = Image.new('RGB', (width, height), (255, 255, 255))  # 创建背景为白色的空图片
        instance.paste(img_01)  # 以坐标(0,0)为基准粘贴第一张图片
        instance.paste(img_02, (0, img1_size[1]))  # 以坐标(0,第一张图片的高)为基准粘贴第二张图片
        # instance.show()
        save_path = 'D:/image_marge.png'
        instance.save(save_path)

        return save_path
### Python 实现两张图片拼接的方法 #### 使用 PIL 库实现图片拼接 PIL 的 `Image` 模块提供了丰富的图像处理功能,可以通过创建一个新的空白图像将两幅图像粘贴到指定位置来完成拼接。 以下是基于 PIL 的水平和垂直拼接示例: ```python from PIL import Image def concat_images_horizontally(image1_path, image2_path, output_path): # 打开两个输入图像 img1 = Image.open(image1_path) img2 = Image.open(image2_path) # 创建新的图像,宽度为两者之和,高度取最大值 width = img1.width + img2.width height = max(img1.height, img2.height) result = Image.new("RGB", (width, height)) # 将第一个图像粘贴到左侧 result.paste(img1, (0, 0)) # 将第二个图像粘贴到右侧 result.paste(img2, (img1.width, 0)) # 保存结果 result.save(output_path) def concat_images_vertically(image1_path, image2_path, output_path): # 打开两个输入图像 img1 = Image.open(image1_path) img2 = Image.open(image2_path) # 创建新的图像,高度为两者之和,宽度取最大值 width = max(img1.width, img2.width) height = img1.height + img2.height result = Image.new("RGB", (width, height)) # 将第一个图像粘贴到上方 result.paste(img1, (0, 0)) # 将第二个图像粘贴到下方 result.paste(img2, (0, img1.height)) # 保存结果 result.save(output_path) ``` 上述代码分别实现了水平和垂直方向上的图片拼接[^1]。通过调整新图像的尺寸以及调用 `paste()` 方法的位置参数,可以灵活控制拼接方式。 --- #### 使用 OpenCV 实现图片拼接 OpenCV 提供了更为高效的矩阵运算能力,适合大规模图像处理场景。以下是一个简单的例子展示如何使用 OpenCV 来拼接两张图片: ```python import cv2 def concat_images_opencv_horizontal(image1_path, image2_path, output_path): # 加载调整大小至相同维度 img1 = cv2.imread(image1_path) img2 = cv2.imread(image2_path) h, w = min(img1.shape[0], img2.shape[0]), img1.shape[1] + img2.shape[1] resized_img1 = cv2.resize(img1, (int(w / 2), h)) resized_img2 = cv2.resize(img2, (int(w / 2), h)) # 水平堆叠 merged_image = cv2.hconcat([resized_img1, resized_img2]) cv2.imwrite(output_path, merged_image) def concat_images_opencv_vertical(image1_path, image2_path, output_path): # 加载调整大小至相同维度 img1 = cv2.imread(image1_path) img2 = cv2.imread(image2_path) h, w = img1.shape[0] + img2.shape[0], min(img1.shape[1], img2.shape[1]) resized_img1 = cv2.resize(img1, (w, int(h / 2))) resized_img2 = cv2.resize(img2, (w, int(h / 2))) # 垂直堆叠 merged_image = cv2.vconcat([resized_img1, resized_img2]) cv2.imwrite(output_path, merged_image) ``` 此代码片段展示了如何利用 OpenCV 中的 `hconcat` 和 `vconcat` 函数快速实现水平与垂直拼接[^3]。需要注意的是,在实际应用中可能需要先对原始图像进行缩放以匹配其分辨率。 --- #### 总结 无论是采用 PIL 还是 OpenCV 都能很好地满足不同需求下的图片拼接任务。对于初学者来说,推荐优先尝试简单易懂的 PIL 接口;而对于追求性能优化或者复杂变换的应用场合,则可以选择功能强大的 OpenCV 工具集[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值