python调用stitcher类自动实现多个图像拼接融合

该博客介绍了如何利用OpenCV的Stitcher模块进行图像拼接,包括单张和多张图片的拼接。文章强调了Stitcher在处理大图像时可能出现的问题,以及对图像重合特征区域的依赖。提供的代码示例展示了如何通过Python读取图片并进行拼接操作,最后展示了一些拼接结果。
该文章已生成可运行项目,

使用stitcher需要注意,图像太大会报错而且计算慢。

特点和适用范围:图像需有足够重合相同特征区域。

优点:适应部分倾斜/尺度变换和畸变情形,拼接效果好,使用简单,可以一次拼接多张图片。

缺点:需要有足够的相同特征区域进行匹配,速度较慢(和图像大小有关)。

原图(可下载)

代码(两张图片拼接)

import sys
import cv2

if __name__ == "__main__":
    img1 = cv2.imread('C:/Users/Guaguan/Desktop/img/1.jpg')    # 图片绝对路径,
    img2 = cv2.imread('C:/Users/Guaguan/Desktop/img/2.jpg')

    # stitcher = cv2.createStitcher(False)    # 老的OpenCV版本,用这一个
    stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA)  # 我的是OpenCV4

    (status, pano) = stitcher.stitch((img1, img2))
    if status != cv2.Stitcher_OK:
        print("不能拼接图片, error code = %d" % status)
        sys.exit(-1)
    print("拼接成功.")
    cv2.imshow('pano', pano)
    # cv2.imwrite("pano.jpg", pano)
    cv2.waitKey(0)

拼接结果

原图

代码(多个图像自动拼接)

import os
import sys
import cv2
import win32ui


# ? python基于Stitcher图像拼接


def imgstitcher(imgs):  # 传入图像数据 列表[] 实现图像拼接
    stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA)
    _result, pano = stitcher.stitch(imgs)

    if _result != cv2.Stitcher_OK:
        print("不能拼接图片, error code = %d" % _result)
        sys.exit(-1)

    output = 'result' + '.png'
    cv2.imwrite(output, pano)
    print("拼接成功. %s 已保存!" % output)


if __name__ == "__main__":
    # imgPath为图片所在的文件夹相对路径
    imgPath = 'C:/Users/Guaguan/Desktop/img'
    
    imgList = os.listdir(imgPath)
    imgs = []
    for imgName in imgList:
        pathImg = os.path.join(imgPath, imgName)
        img = cv2.imread(pathImg)
        if img is None:
            print("图片不能读取:" + imgName)
            sys.exit(-1)
        imgs.append(img)

    imgstitcher(imgs)    # 拼接

    cv2.waitKey(0)
    cv2.destroyAllWindows()

结果

 

本文章已经生成可运行项目
### 回答1: os.path.join是一个用于拼接路径的方法,主要用于在不同操作系统中正确的拼接文件和文件夹的路径。无论是Windows系统、Linux系统还是macOS系统,os.path.join方法都能够保证路径的正确拼接和格式化。 使用os.path.join拼接路径的语法很简单,只需要将要拼接的路径作为参数传入即可。这些路径可以是字符串型的文件名或文件夹名,也可以是变量、常量等。 os.path.join方法会根据操作系统自动识别路径分隔符,并将路径拼接成正确的格式。在Windows系统中,路径分隔符是反斜杠(\),在Linux和macOS系统中,路径分隔符是正斜杠(/)。因此,os.path.join方法会根据不同的操作系统自动选择相应的路径分隔符进行拼接。 下面是一个示例用法: ``` import os dir_path = "parent_folder" file_name = "example.txt" # 使用os.path.join拼接路径 file_path = os.path.join(dir_path, file_name) # 输出拼接后的路径 print(file_path) ``` 以上代码拼接了一个文件路径,将`parent_folder`作为文件夹路径,`example.txt`作为文件名。无论在哪个操作系统中运行,os.path.join方法都会根据当前系统自动选择相应的路径分隔符进行拼接,所以输出的结果是正确的路径。 os.path.join的使用可以避免手动拼接路径时可能出现的格式错误,确保路径的正确性和可移植性。这在处理文件、文件夹的路径时非常有用。 ### 回答2: os.path.join 是Python中os模块中的一个函数,用于拼接文件路径。它接受任意数量的参数,并将它们连接起来形成一个有效的文件路径。 使用os.path.join可以避免手动拼接路径时出现的一些问题。它会自动根据操作系统的不同来确定正确的路径分隔符,无论是斜杠还是反斜杠。 例如,在Windows系统上,使用os.path.join可以将两个路径拼接起来,形成一个新的路径。比如: ```python import os path1 = 'C:\\Users\\' path2 = 'Documents\\file.txt' new_path = os.path.join(path1, path2) print(new_path) ``` 输出的结果为: ``` C:\Users\Documents\file.txt ``` 在这个例子中,`C:\\Users\\` 是第一个路径,`Documents\\file.txt` 是第二个路径。使用os.path.join函数将它们拼接在一起,生成了`C:\Users\Documents\file.txt` 这个新的路径。 无论在哪个操作系统上运行,os.path.join都会根据当前系统的路径规则正确地拼接路径。这样就避免了手动拼接路径时需要关注不同操作系统的路径规则的麻烦。 总之,os.path.join是一个非常便利的函数,可以简化路径拼接的工作,确保生成的路径在任何操作系统上都是有效的。 ### 回答3: os.path.join是Python中的一个函数,用于将多个路径组合起来,生成新的路径。 它的作用是根据操作系统的不同,自动选择正确的路径分隔符(/或\),并将多个路径片段连接在一起。 使用os.path.join非常简单,只需要将要拼接的路径片段作为参数传递给函数即可。例如: import os path = os.path.join('home', 'user', 'Documents', 'file.txt') print(path) 上述代码中,我们传递了4个路径片段给os.path.join函数,函数会根据操作系统的不同,自动选择正确的路径分隔符将它们连接起来。最终生成的路径为:home/user/Documents/file.txt。 这样做的好处是,我们不需要关心操作系统的不同,就可以在不同的平台上正确地连接路径。这对于编写可移植的代码非常有帮助。 需要注意的是,os.path.join只会进行路径的拼接,不会检查生成的路径是否存在或有效。如果需要检查路径的有效性,可以使用os.path.exists函数。 总结:os.path.join函数是Python中用于路径拼接的函数,它会根据操作系统的不同选择正确的路径分隔符,将多个路径片段连接在一起。使用os.path.join可以简化路径操作的代码,提高代码的可移植性。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Helloworld-睖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值