python街景-全景图像的拼接(使用SUPF算法)

# 初次尝试全景图像拼接
# stitchers算法的基本原理:
# 1 首先就是通过算法找特征点(SURF算法,也可以用SIFT算法)。
# 2 其次就是计算图片之间的特征点的匹配程度,达到阈值才能拼接成功。
# 3 等一系列操作,可参照我的demo01.
# 4 拼接

# 如果要拼接成功:则首要条件是保证图片间图像重叠部分的特征点重合(匹配)的地方比较多。
# 因为特征点提取用的是SURF算法,查阅资料可知:SURF算法主要提取的是一些突出点,比如轮廓边缘,角点。
# 就是说:特征点出现位置,一般都在有形状的地方或者形状变化明显的地方,才有良好的拼接效果。
# 若是图像中大部分区域都为纯白色的天花板,导致整体特征点比较少,图像重叠部分的特征点也较少,会导致其匹配特征点的失败。
# 这个比较适合,一个坐标点的多张照片,全景图的拼接,效果较好。
# sift速度是sift的三倍。
# sift适用于尺度和旋转变换的图像,suft处理亮度变化的图像最好。
# 经调研,选择不同坐标点,不同照片拼接为街道立面的工作,百度做得很好。

# 解决问题的思路:提取特征点的源码,然后把每张图的特征点画出来,观察一下特征点的情况,根据实际情况分析和调整。
# 经过实验发现,Stitcher算法要拼接成功的要素是图间的重叠部分的特征点 重叠度和重叠数量要达到一个阈值才行。

# demo01
import numpy as np
import cv2
from cv2 import Stitcher

if __name__ == "__main__":
    img1 = cv2.imread('one.jpg')
    img2 = cv2.imread('two.jpg')
    stitcher = cv2.createStitcher(False)
    # stitcher = cv2.Stitcher.create(cv2.Stitcher_PANORAMA), 根据不同的OpenCV版本来调用
    (_result, picture_result) = stitcher.stitch((img1, img2))
    # cv2.imshow('picture_result', picture_result)
    cv2.imwrite("./picture_result.jpg", picture_result)
    cv2.waitKey(0)
    quit()

你可能感兴趣的:(python学习,python,算法,计算机视觉)