(OpenCV)图片拼接

这篇具有很好参考价值的文章主要介绍了(OpenCV)图片拼接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        图片拼接在许多领域都有广泛的应用,包括但不限于以下几个方面:

  1. 全景摄影:在摄影中,通过将多张照片拼接在一起可以实现全景照片的效果。这在旅游景点、房地产展示等领域有着广泛的应用,能够提供更加生动、真实的视觉体验。

  2. 医学影像处理:在医学影像领域,例如 CT、MRI 等影像数据的拼接可以帮助医生获取更加完整的患者信息,进而进行更精确的诊断和治疗计划制定。

  3. 地图制作:地图制作中常常需要将多个局部地图或航拍影像拼接成较大范围的地图,以满足城市规划、导航、军事应用等领域的需求。

  4. 无人机航拍:在无人机航拍领域,通过将无人机航拍获取的多张照片进行拼接,可以生成更加细致和全面的航拍影像,用于农业、环境监测、工程测绘等领域。

  5. 虚拟现实(VR)和增强现实(AR):在虚拟现实和增强现实技术中,图片拼接可以用来创建虚拟环境或增强真实环境,提供更加沉浸式的体验。

  6. 文物修复和数字化:在文物保护领域,通过对文物的多角度拍摄并进行拼接,可以实现对文物的三维重建和数字化保存,以及对文物进行修复和研究。

代码

重叠拼接

将相同位置的图片进行叠加

import cv2
import numpy as np


# 加载图片
image1 = cv2.imread('D:\\sucai\\image1.png')
image2 = cv2.imread('D:\\sucai\\image2.png')

save_img = 'D:\\sucai\\merge_image_simple.png'
# 确定目标图像大小
height = max(image1.shape[0], image2.shape[0])
width = max(image1.shape[1], image2.shape[1])
target_image = np.zeros((height, width, 3), dtype=np.uint8)
# 叠加图片
target_image[:image1.shape[0], :image1.shape[1]] = image1
target_image[:image2.shape[0], :image2.shape[1]] += image2  # 叠加在同一位置

# 显示结果
cv2.imshow('Simple Blend', target_image)
cv2.imwrite(save_img, target_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

重叠拼接(加权)

在OpenCV中,cv2.addWeighted()函数可以用来对两幅图像进行加权相加,产生一幅新的图像

通过调整alphabeta的值,可以控制不同图像在最终混合结果中所占比重,从而实现不同的混合效果。

import cv2

# 读取两幅图像
img_path_list = ['D:\\sucai\\image1.png', 'D:\\sucai\\image2.png']
image_obj_list = [cv2.imread(i) for i in img_path_list]
w_list = [i.shape[0] for i in image_obj_list]
h_list = [i.shape[1] for i in image_obj_list]
w_max = max(w_list)
h_max = max(h_list)
image_obj_list = [cv2.resize(i, (w_max, h_max)) for i in image_obj_list]
# 设置权重参数
"""
src1:第一幅输入图像。
alpha:第一幅图像的权重。
src2:第二幅输入图像。
beta:第二幅图像的权重。
gamma:一个可选的参数,用于控制加权和的常数值。
"""
alpha = 0.5
beta = 0.5
gamma = 0
# 对两幅图像进行加权相加
merged_image = cv2.addWeighted(image_obj_list[0], alpha, image_obj_list[1], beta, gamma)

# 显示结果
cv2.imshow('Blended Image', merged_image)
cv2.imwrite(save_img, merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

水平拼接

import cv2


img_path_list = ['D:\\sucai\\image1.png', 'D:\\sucai\\image2.png']
save_img = 'D:\\sucai\\merge_image.png'
image_obj_list = [cv2.imread(i) for i in img_path_list]
# 获取所有图片的尺寸大小
w_list = [i.shape[0] for i in image_obj_list]
h_list = [i.shape[1] for i in image_obj_list]
w_max = max(w_list)
h_max = max(h_list)
# 统一子图的尺寸大小
image_obj_list = [cv2.resize(i, (w_max, h_max)) for i in image_obj_list]
# 水平拼接
merged_image = cv2.hconcat(image_obj_list)

# 显示合并后的图片
cv2.imshow('Merged Image', merged_image)
# 保存图片
cv2.imwrite(save_img, merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

垂直拼接

import cv2


img_path_list = ['D:\\sucai\\image1.png', 'D:\\sucai\\image2.png']
save_img = 'D:\\sucai\\merge_image.png'
image_obj_list = [cv2.imread(i) for i in img_path_list]
# 获取所有图片的尺寸大小
w_list = [i.shape[0] for i in image_obj_list]
h_list = [i.shape[1] for i in image_obj_list]
w_max = max(w_list)
h_max = max(h_list)
# 统一子图的尺寸大小
image_obj_list = [cv2.resize(i, (w_max, h_max)) for i in image_obj_list]
# 垂直拼接
merged_image = cv2.vconcat(image_obj_list)

# 显示合并后的图片
cv2.imshow('Merged Image', merged_image)
# 保存图片
cv2.imwrite(save_img, merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

全景拼接

拼接器使用这些重叠区域中的特征点来找到图像间的对应关系。如果重叠区域过小或者不存在,拼接器可能无法找到足够的匹配特征点进行拼接。

import sys
import cv2

img1 = cv2.imread('D:\\sucai\\2\\image1.png')
img2 = cv2.imread('D:\\sucai\\2\\image2.png')

save_img = 'D:\\sucai\\merge_image.png'

# 检查图像是否正确加载
if img1 is None or img2 is None:
    print("其中一个或两个图像加载失败")
    sys.exit()

img_obj = cv2.Stitcher.create(cv2.Stitcher_PANORAMA)
(status, stitched_image) = img_obj.stitch((img1, img2))
if status != cv2.Stitcher_OK:
    print("不能拼接图片, error code = %d" % status)
else:
    print("拼接成功.")
    cv2.imshow('pano', stitched_image)
    cv2.imwrite(save_img, stitched_image)
    cv2.waitKey()
    cv2.destroyAllWindows()
sys.exit()

前景图和背景图拼接

注意:前景图需要作个缩放处理,小于背景图.

(OpenCV)图片拼接,opencv,人工智能,计算机视觉 文章来源地址https://www.toymoban.com/news/detail-836618.html


save_img = 'D:\\sucai\\merge_image.png'
img_list = ['D:\\sucai\\5\\foreground.png', 'D:\\sucai\\5\\background.png']

img_fg = cv2.imread(img_list[0])  # 读取前景图
img_bg = cv2.imread(img_list[1])  # 读取背景图
# 读取背景图和前景图的像素和通道数
rows_bg, cols_bg, channels_bg = img_bg.shape
rows_fg, cols_fg, channels_fg = img_fg.shape

# 为了防止批处理时有可能出现前景图像素尺寸大于背景图的情况,做一个缩小前景图的操作
rows_change_fg = rows_fg // 6
cols_change_fg = cols_fg // 6
# 把前景图缩小
img_fg = cv2.resize(img_fg, (cols_change_fg, rows_change_fg), interpolation=cv2.INTER_LINEAR)
# 选择背景图中对应大小的区域
start_row = 240
start_col = 280
roi = img_bg[start_row:rows_change_fg+start_row, start_col:cols_change_fg+start_col]
# 将前景图转换为灰度图
img_fg2gray = cv2.cvtColor(img_fg, cv2.COLOR_BGR2GRAY)
# 创建掩膜
ret, mask = cv2.threshold(img_fg2gray, 255, 255, cv2.THRESH_BINARY)
# 掩膜取反
mask_inv = cv2.bitwise_not(mask)
# 使用掩膜进行图像合并
img_bg_bg = cv2.bitwise_and(roi, roi, mask=mask)
img_fg_fg = cv2.bitwise_and(img_fg, img_fg, mask=mask_inv)

dst = cv2.add(img_bg_bg, img_fg_fg)
img_bg[start_row:rows_change_fg + start_row, start_col:cols_change_fg+start_col] = dst
cv2.imshow('merge_image', img_bg)
cv2.imwrite(save_img, img_bg)
cv2.waitKey(0)
cv2.destroyAllWindows()

到了这里,关于(OpenCV)图片拼接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机毕设 python opencv 机器视觉图像拼接算法

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月07日
    浏览(63)
  • OpenCV将两张图片拼接成一张图片

    可以用opencv或者numpy的拼接函数,直接将两张图拼接到一起,很简单方便,参考代码2, 推荐此方式 。 新建图片,将两张图片的像素值填充到新图片对应位置上即可,参考代码1。 以下是将两张图片拼接成一张图片的示例代码: 以下是将两张图片在同一个窗口显示的示例代码

    2024年02月04日
    浏览(49)
  • Python Opencv实践 - 全景图片拼接stitcher

            由于手里没有切割好的全景图片资源,因此首先写了一个切片的程序spliter。         如果有现成的切割好的待拼接的切片文件,则不需要使用spliter。         对于全景图片的拼接,需要注意一点,各个切片图片之间要有重复的内容以便opencv能够提取到关键点并

    2024年02月22日
    浏览(49)
  • opencv实践项目-多张图片拼接之stitcher

    OpenCV从2.4.x版本之后多出来一个新的模型 图像拼接,该模块通过简单的高级API设置,可以获得比较好的图像拼接效果,OpenCV官方提供了一个高度集成的API函数 Stitcher,只要两行代码就可以得到一个很好的拼接图像。 其中第一行代码是创建拼接Stitcher的指针,第二行代码是调用

    2024年02月04日
    浏览(42)
  • Python 结合opencv实现图片截取和拼接

    python 3.6.2 scikit-build-0.16.7 win10 opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 下载地址: https://pypi.org/project/opencv-python/4.5.4.60/#files https://files.pythonhosted.org/packages/57/6c/7f4f56b2555d5c25dd4f41fc72a16dc6402cb2b4f967da11d8d26c669b55/opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 注意:下载时不用下abi版的,比如 o

    2024年02月08日
    浏览(44)
  • openCV 第四篇 角点检测、图像特征、图片拼接

    本文原本打算直接简单介绍一下harris和sift,之后进行特征匹配,来一波图像拼接。 想来想去还是先介绍下原理吧,虽然没人看QAQ。可以直接点击右侧目录跳转到代码区。 角点检测  和  图像特征提取(就几行代码) 以及进行图像拼接代码,来完成如下操作: 上图我们可以清楚

    2024年01月17日
    浏览(52)
  • OpenCV完美实现两张图片的全景拼接(详细教程)

    目录 1,主要步骤 1.1  导入需要的包和模块,并读取两张待拼接的图片,这里我们假设它们为 left.jpg 和 right.jpg。 1.2  创建SIFT检测器 1.3 创建一个基于 FLANN 的匹配器 1.4  筛选过程删除掉一些不合适的匹配点,只保留最好的匹配点 1.5透视变换 1.6  消除重叠的效果,对两张

    2024年02月06日
    浏览(42)
  • 阶段五:深度学习和人工智能(学习人工智能的应用领域,如自然语言处理,计算机视觉等)

    Python是人工智能领域最流行的编程语言之一,它具有简单易学、功能强大、库丰富等优点,因此在自然语言处理、计算机视觉等领域得到了广泛应用。 自然语言处理 自然语言处理是人工智能领域的一个重要分支,它主要研究如何让计算机理解和处理人类语言。Python在自然语

    2024年02月04日
    浏览(80)
  • 深入探索人工智能与计算机视觉

    在当今数字化时代,人工智能(AI)和计算机视觉(CV)作为两大前沿技术,正以惊人的速度改变着我们的生活。本文将深入探讨人工智能与计算机视觉的关系、应用以及未来发展方向。 1. 人工智能与计算机视觉的关系 人工智能是一门涵盖众多技术领域的学科,旨在使计算机

    2024年04月14日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包