再写-全景拼接

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

全景拼接

1. 将读取进行灰度转化,并且输出图像,关键点和计算描述

import cv2
import numpy as np

# 将读取进行灰度转化,并且输出图像,关键点和计算描述
image_left = cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie_1.png")
image_right = cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie_2.png")
imge_letf = cv2.resize(image_left, (image_right.shape[1], image_left.shape[0]))
print(imge_letf.shape)
# 图像灰度化
image_left_gray = cv2.cvtColor(image_left, cv2.COLOR_RGB2GRAY)
image_right_gray = cv2.cvtColor(image_right, cv2.COLOR_RGB2GRAY)
# 创建sift对象
sift = cv2.SIFT_create()
# 计算关键点
kp_left, des_left = sift.detectAndCompute(image_left_gray, None)
kp_right, des_right = sift.detectAndCompute(image_right_gray, None)
# 绘制关键点
draw_left = cv2.drawKeypoints(
    image_left_gray, kp_left, None, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS
)
draw_right = cv2.drawKeypoints(
    image_right_gray, kp_right, None, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS
)
# 显示图片
cv2.imshow('draw_left', np.hstack((image_left, draw_left)))
cv2.imshow('draw_right', np.hstack((image_right, draw_right)))
cv2.waitKey(0)
# 保存图片
cv2.imwrite('draw_left.png', np.hstack((image_left, draw_left)))
cv2.imwrite('draw_right.png', np.hstack((image_right, draw_right)))

运行后保存图片:
再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能

再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能

2.利用匹配器 匹配两个描述符的相近程度,并将特征点进行连线

# 使用**cv.BFMatcher**()创建BFMatcher对象
bf = cv2.BFMatcher()
# 利用匹配器 匹配两个描述符的相近程度
# (knn 匹配可以返回k个最佳的匹配项    bf返回所有的匹配项)
matches = bf.knnMatch(des_right, des_left, k=2)
# 按照相近程度,进行排序
matches = sorted(matches, key=lambda x: x[0].distance / x[1].distance)

good = []

for m, n in matches:
    # 对欧式距离进行筛选d
    if m.distance < 0.6 * n.distance:
        good.append(m)
all_good_image = cv.drawMatches(
        img_right, key_right, img_left, key_left, good_match, None, None, None, None, flags=2
    )
    bfs.img_show("关键点之间进行连线", all_goog_image)

再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能

3.对图像进行拼接

if len(good) > 4:
    ptsR = np.float32(
        [kp_right[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
    ptsL = np.float32(
        [kp_left[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)

    ransacReprojThreshold = 4

    Homography, status = cv2.findHomography(
        ptsR, ptsL, cv2.RANSAC, ransacReprojThreshold)

    Panorama = cv2.warpPerspective(
        image_right, Homography, (image_right.shape[1] + image_left.shape[1], image_right.shape[0])
    )

    cv2.imshow("扭曲变换后的右图", Panorama)
    cv2.imwrite('扭曲变换后的右图.png', Panorama)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Panorama[0:image_left.shape[0], 0:image_left.shape[1]] = image_left

    cv2.namedWindow("全景图", cv2.WINDOW_AUTOSIZE)
    cv2.imshow("全景图", Panorama)
    cv2.imwrite("END.png", Panorama)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能
再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能

    Panorama[0:image_left.shape[0], 0:image_left.shape[1]] = image_left
ValueError: could not broadcast input array from shape (376,498,3) into shape (374,498,3)

以上保存的原因是:出现这个问题的主要原因是因为list中array的shape不一致造成的,所以发生这个问题的时候。

解决方法:这个 时候检测一下面这两段代码有没有起作用

image_right = cv2.resize(image_right, (400, 800))
image_left = cv2.resize(image_left, (400, 800))

bug解决:
再写-全景拼接,python,计算机视觉,opencv,计算机视觉,人工智能

如果我们的扭曲变换后的图最后的图出现这样的情况的话我们需要关注一下以下代码

因为这个段代码是将左图`des_left`作为模板图,右图作为`des_right`最为去匹配的图
matches = bf.knnMatch(des_left, des_right, k=2)

但是这两段代码所反映的情况是将右图作为模板图进行拼接(也就是计算机蒙了)
 Panorama = cv2.warpPerspective(
        image_right, Homography, (image_right.shape[1] + image_left.shape[1], image_right.shape[0])
    )

Panorama[0:image_left.shape[0], 0:image_left.shape[1]] = image_left

源码:文章来源地址https://www.toymoban.com/news/detail-851937.html

# -*- coding: UTF-8 -*-
# @Project :opencv 
# @File    :全景拼接笔记.py
# @Author  :阿龙的代码在报错
# @IDE     :PyCharm 
# @Date    :2024/4/13 16:23
import cv2
import numpy as np

# 将读取进行灰度转化,并且输出图像,关键点和计算描述
image_left = cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie_1.png")
image_right = cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie_2.png")
# 将图片设置为同样的大小
image_right = cv2.resize(image_right, (400, 800))
image_left = cv2.resize(image_left, (400, 800))
# 图像灰度化
gray_left = cv2.cvtColor(image_left, cv2.COLOR_BGR2GRAY)
gray_right = cv2.cvtColor(image_right, cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT_create()

kp_left, des_left = sift.detectAndCompute(image_left, None)
kp_right, des_right = sift.detectAndCompute(image_right, None)

draw_left = cv2.drawKeypoints(
    gray_left, kp_left, None, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS)

draw_right = cv2.drawKeypoints(
    gray_right, kp_right, None, flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS)

# 显示图片
cv2.imshow('draw_left', np.hstack((image_left, draw_left)))
cv2.imshow('draw_right', np.hstack((image_right, draw_right)))
cv2.waitKey(0)
# 保存图片
cv2.imwrite('draw_left.png', np.hstack((image_left, draw_left)))
cv2.imwrite('draw_right.png', np.hstack((image_right, draw_right)))

# 使用**cv.BFMatcher**()创建BFMatcher对象
bf = cv2.BFMatcher()
# 利用匹配器 匹配两个描述符的相近成都
# (knn 匹配可以返回k个最佳的匹配项    bf返回所有的匹配项)
matches = bf.knnMatch(des_right, des_left, k=2)

# queryDescriptors:查询图像的特征描述子集 (第一个参数)
# trainDescriptors:训练图像的特征描述子集 (第二个参数)
# 按照相近程度,进行排序
matches = sorted(matches, key=lambda x: x[0].distance / x[1].distance)

good = []

for m, n in matches:
    # 对欧式距离进行筛选
    if m.distance < 0.6 * n.distance:
        good.append(m)
all_goog_image = cv2.drawMatches(
    image_right, kp_right, image_left, kp_left, good, None, None, None, None, flags=2
)
cv2.imshow("关键点之间进行连线", all_goog_image)
cv2.imwrite('all_good.png', all_goog_image)

if len(good) > 4:
    ptsR = np.float32(
        [kp_right[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
    ptsL = np.float32(
        [kp_left[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)

    ransacReprojThreshold = 4

    Homography, status = cv2.findHomography(
        ptsR, ptsL, cv2.RANSAC, ransacReprojThreshold)

    Panorama = cv2.warpPerspective(
        image_right, Homography, (image_right.shape[1] + image_left.shape[1], image_right.shape[0])
    )

    cv2.imshow("扭曲变换后的右图", Panorama)
    cv2.imwrite('扭曲变换后的右图.png', Panorama)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Panorama[0:image_left.shape[0], 0:image_left.shape[1]] = image_left

    cv2.namedWindow("全景图", cv2.WINDOW_AUTOSIZE)
    cv2.imshow("全景图", Panorama)
    cv2.imwrite("END.png", Panorama)
    cv2.waitKey(0)
    cv2.destroyAllWindows(

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

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

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

相关文章

  • 计算机视觉(三)图像拼接

    1.1 流程 要拼接多张图像,就一定要找到他们之间的映射关系,流程如下: 得到映射关系,就能进行拼接: 简而言之,拼接两张图像,就是找到他们的特征点,根据这些特征点: 1.2 映射与处理 找到两张图像的像素点对应关系,然后把第二张图像映射到在第一张图像的坐标系

    2024年02月05日
    浏览(91)
  • 计算机视觉基础学习-图像拼接

    首先本文介绍的图像拼接并非对尺寸相同的图片进行简单拼接,而是基于全景图的拼接 普通相机拍摄图像时,无法兼顾相机视场与视场中单个物体的分辨率问题,而全景相机普遍价格昂贵, 不适用于低成本的一般性场景。为了使用普通相机获取宽视角,甚至是 360°全景图像

    2023年04月10日
    浏览(53)
  • Python OpenCV 计算机视觉:6~7

    原文:OpenCV Computer Vision with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。 本附录显示了如何在

    2024年02月02日
    浏览(50)
  • 计算机竞赛 - 基于机器视觉的图像拼接算法

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你

    2024年02月13日
    浏览(73)
  • 计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

    🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的试卷系统 - opencv python 视觉识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 机器视觉的发展对存在的作业批改问题, 提供了有效的解决方案

    2024年02月07日
    浏览(63)
  • Opencv快速入门教程,Python计算机视觉基础

    OpenCV 是 Intel® 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非商业应用和商业应用都

    2024年02月09日
    浏览(68)
  • 再写-全景拼接

    运行后保存图片: 以上保存的原因是:出现这个问题的主要原因是因为list中array的shape不一致造成的,所以发生这个问题的时候。 解决方法:这个 时候检测一下面这两段代码有没有起作用 bug解决: 如果我们的 扭曲变换后的图 和 最后的图 出现这样的情况的话我们需要关注

    2024年04月15日
    浏览(32)
  • 计算机视觉项目实战-基于特征点匹配的图像拼接

    😊😊😊 欢迎来到本博客 😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉 作者简介 : ⭐️⭐️⭐️ 目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo),python网页爬虫、机器学习、计算机视觉(OpenCV)、

    2024年02月02日
    浏览(50)
  • 计算机竞赛 机器视觉人体跌倒检测系统 - opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉人体跌倒检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/

    2024年02月07日
    浏览(66)
  • 计算机竞赛 深度学习 机器视觉 人脸识别系统 - opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https://gitee.com/dancheng

    2024年02月07日
    浏览(89)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包