【demoSURF】室内定位(图像匹配)基础代码实现,包含所有可以出现问题的解法

代码如下

import numpy as np
import cv2
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号img1 = cv2.imread("D:/data/North/0007.JPG",0)
img2 = cv2.imread("D:/data/North/0019.JPG",0)
img1 = cv2.resize(img1, (1920, 1080))
img2 = cv2.resize(img2, (1920, 1080))surf = cv2.xfeatures2d.SURF_create(1200)kp1 = surf.detect(img1, None)
kp2 = surf.detect(img2, None)# kp:检测到的特征点 des:描述子矩阵
kp1, des1 = surf.compute(img1, kp1)
kp2, des2 = surf.compute(img2, kp2)
# img2=cv2.drawKeypoints(img,kp,None,(255,0,0),4)bf = cv2.BFMatcher(cv2.NORM_L2)matchesknn = bf.knnMatch(des1, des2, k=2)  # knn 匹配可以返回k个最佳的匹配项、bf返回所有的匹配项
good = []for m, n in matchesknn:if m.distance < 0.7 * n.distance:good.append(m)img32 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, matchesknn, img2, flags=2)
imgknnfilter = cv2.drawMatches(img1, kp1, img2, kp2, good, img2, flags=2)
imgsurfshowkp = cv2.drawKeypoints(img2, kp2, img2, flags=4)print('matchesknn' + str(len(matchesknn)))
print(matchesknn)
print('good' + str(len(good)))# plt.title('SURF特征点提取',fontsize=12)
plt.imshow(imgsurfshowkp)
plt.axis('off')
plt.savefig('featureExtract.png', dpi=300, bbox_inches='tight', pad_inches=0.0)
plt.show()# plt.figure(figsize=(10,10))
# plt.title('knn法匹配(noFilter)',fontsize=12)
plt.figure(dpi=300, figsize=(16,9))
plt.imshow(img32)
plt.axis('off')
plt.savefig('knnNoFilter.png', dpi=300, bbox_inches='tight', pad_inches=0.0)
plt.show()# plt.title('knn法匹配(withFilter)',fontsize=12)
plt.figure(dpi=300, figsize=(16,9))
plt.imshow(imgknnfilter)
plt.axis('off')
plt.savefig('knnWithFilter.png', dpi=300, bbox_inches='tight', pad_inches=0.0)
plt.show()
#
# cv2.waitKey(0)
# cv2.destroyAllWindows()# match
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)# draw
img12 = cv2.drawMatches(img1, kp1, img2, kp2, matches[: 50], img2, flags=2)# plt.figure(figsize=(10,10))
# plt.title('surf检测特征点',fontsize=20)
plt.title('暴力法匹配',fontsize=12)
plt.axis('off')
plt.imshow(img12)
plt.show()cv2.waitKey(0)
cv2.destroyAllWindows()

1. 修改图像文件路径

出现

SyntaxError: (unicode error) 'unicodeescape' `在这里插入代码片`codec can't decode bytes in position 7-8: malformed \N character escape

问题,使用反斜杠更改路径
在这里插入图片描述

2.问题

算法被申请了专利,将opencv版本退到3.4.2即可解决,必须小于等于Python3.7
在这里插入图片描述
遇到这个问题 首先检查自己配置的python版本python --version ,这里要求是3.7版本的。
如果高版本无法转换到3.7的话建议重新创建一个虚拟环境。

conda安装虚拟环境

#这样就创建了一个名字为my_env_name,基于python版本3.7的一个虚拟环境了。
conda create -n my_env_name python=3.7

在这里插入图片描述
conda虚拟环境的激活脚本

activate my_env_name

在这里插入图片描述
安装虚拟环境的激活脚本3.4.2.17

#​卸载opencv
pip uninstall opencv-python#安装3.4.2.16
pip install opencv-python==3.4.2.16   -i https://pypi.tuna.tsinghua.edu.cn/simplepip install opencv-contrib-python==3.4.2.16  -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

pip install opencv-contrib-python==3.4.2.16  -i https://pypi.tuna.tsinghua.edu.cn/simple
在pycharm中添加解释器,找到Anaconda目录下的envs文件夹,进去找到自己配置的虚拟环境文件夹,再找到python.exe文件,点击选中即可。点击确定。
在这里插入图片描述

3.问题

在这里插入图片描述

pip install matplotlib -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

在这里插入图片描述

4.结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】自己代码实现字符串相关的常用API

目录 1、实现get(char *)&#xff1b;从键盘获取字符串2、实现put&#xff08;char *&#xff09;&#xff1b;输出字符串3、实现strlen&#xff08;char *&#xff09;&#xff1b;求字符串长度4、实现strcpy&#xff08;char *&#xff0c;char *&#xff09;&#xff1b;拷贝…

C#,入门教程(11)——枚举(Enum)的基础知识和高级应用

上一篇&#xff1a; C#&#xff0c;入门教程(10)——常量、变量与命名规则的基础知识https://blog.csdn.net/beijinghorn/article/details/123913570 不会枚举&#xff0c;就不会编程&#xff01; 枚举 一个有组织的常量系列 比如&#xff1a;一个星期每一天的名字&#xf…

使用HttpSession和过滤器实现一个简单的用户登录认证的功能

这篇文章分享一下怎么通过session结合过滤器来实现控制登录访问的功能&#xff0c;涉及的代码非常简单&#xff0c;通过session保存用户登录的信息&#xff0c;如果没有用户登录的话&#xff0c;会在过滤器中处理&#xff0c;重定向回登录页面。 创建一个springboot项目&#…

Visual Studio 2017 + opencv4.6 + contribute + Cmake(Aruco配置版本)指南

之前配置过一次这个&#xff0c;想起这玩意就难受&#xff0c;贼难配置。由于要用到里面的一个库&#xff0c;不得已再进行配置。看网上的博客是真的难受&#xff0c;这写一块&#xff0c;那里写一块&#xff0c;乱七八糟&#xff0c;配置一顿发现写的都是错的&#xff0c;还得…

Materail Design 进阶(十一)——MaterialButton使用

距离上次写Material组件的文章已经过去了好多年&#x1f604;&#xff0c;最近在写Flutter又接触到了Material&#xff0c;已经升级了许多&#xff0c;这次就用新的组件来试试吧&#xff5e; Button组件大家都非常熟悉了&#xff0c;如果画一个带圆角&#xff0c;边框的按钮&a…

FFmpeg读取Assets资源文件

在Android开发中我们经常把原生资源文件放在assets目录下以供需要时读取&#xff0c;通过API提供的resources.assets.open(filename)/openFd(filenam)方法可以非常方便获得InputStream或FileDescriptor&#xff08;文件标识符&#xff09;&#xff0c;但是在使用FFmpeg读取Asse…

JavaScript系列——同步与异步

文章目录 概要同步代码&#xff1a;异步代码 JavaScript运行机制运行时概念栈&#xff08;stack&#xff09;堆队列消息的添加 异步场景网络请求 异步编程优化小结 概要 异步&#xff0c;按照字面理解&#xff0c;指的是两个或者两个以上的对象或事件不同时存在或者发生&#…

透明OLED屏的稳定性:从技术角度及应用案例解析

在显示技术日新月异的今天&#xff0c;透明OLED屏以其独特的透明特性和出色的显示效果&#xff0c;吸引了众多关注。然而&#xff0c;对于这种新型技术的稳定性&#xff0c;人们难免会有所疑虑。作为一名专注于OLED技术研发的工程师&#xff0c;尼伽小编将从专业角度出发&#…

十种编程语言的对比分析

在当今的软件开发领域&#xff0c;编程语言扮演着至关重要的角色。不同的编程语言各有其特点和适用场景&#xff0c;选择合适的编程语言能够提高开发效率和软件质量。本文将对十种常见的编程语言进行对比分析&#xff0c;帮助读者了解它们的优缺点和适用场景。 一、Python Pyt…

云化XR技术于农业领域中的表现

随着科技的不断发展和应用的深入&#xff0c;农业领域也在逐渐引入新技术来优化生产效率和成本、改进管理和监控等。云化XR&#xff08;CloudXR&#xff09;作为一种融合了云计算、虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;等技术的解决方案&am…

生信技能33 - gnomAD数据库hg19/hg38 VCF文件批量下载脚本

gnomAD数据库下载地址 gnomAD downloads gnomAD v2.1.1数据集包含来自125,748个外显子组和15,708个全基因组的数据,所有这些数据都映射到GRCh 37/hg 19和GRCh 38/hg 38 两个版本的参考序列。 gnomAD数据库hg19与hg39 VCF文件批量下载脚本 download.sh # 获取当前目录路径…

C++-异常处理

1、概念 异常时程序在执行期间产生的问题。C异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。 异常提供了一种转移程序控制权的方式。 一旦程序出现异常没有经过处理&#xff0c;就会造成程序运行崩溃。 处理异常的方式有&#xff1a;抛出异常&#xff08;…

Python基础(十九、文件操作写入与追加)

文章目录 一、文件的写入&#xff08;使用 "w" 模式&#xff09;二、文件的追加&#xff08;使用 "a" 模式&#xff09;三、文件备份案例接之前的答案 在 Python 中&#xff0c;open() 是一个内置函数&#xff0c;用于打开文件并返回文件对象。它是处理文件…

助力实体店数字化升级,VR智慧门店打造线上逛店体验

近年来&#xff0c;传统实体店业绩增长过于缓慢&#xff0c;实体门店的销售疲态十分明显&#xff0c;甚至于部分城市已经出现大量线下实体店开始关门的现象&#xff0c;因此顺应实体零售数字化升级趋势已经刻不容缓。越来越多的实体门店开始意识到这个问题&#xff0c;并逐步开…

cad快速看图软件免费版(手机在线cad快速看图)

cad快速看图软件免费版(手机在线cad快速看图) 很多机械设计师日常工作过程中涉及到多种格式的cad图纸&#xff0c;cad图纸大多都需要cad设计软件才能打开&#xff0c;然而很多小伙伴并没有下载相应的cad设计软件&#xff0c;这种情况下如何进行cad快速看图呢&#xff1f; 今天…

一文弄懂vue中样式穿透v-deep

1. 前言 在vue3的世界里&#xff0c;有一个style标签的关键字v-deep&#xff0c;官网称之为样式穿透。那他究竟是什么原理呢&#xff1f;又是怎么工作的呢&#xff1f;让我们一起探究一下。 2. 准备工作 需要实现搭建一个vue3的环境&#xff0c;我这里使用的是vitevue3的架构…

使用JavaScript制作一个简单的天气应用

随着Web开发技术的不断发展&#xff0c;JavaScript已经成为前端开发中不可或缺的一部分。它不仅可以用于创建动态和交互式的用户界面&#xff0c;还可以用于处理各种复杂的任务&#xff0c;如数据验证、动态内容更新、实时通信等。以下是一个使用JavaScript来创建一个简单天气应…

【OJ】单链表刷题

力扣刷题 1. 反转链表&#xff08;206&#xff09;1.1 题目描述1.2 题目分析1.2.1 头插法1.2.2 箭头反转 1.3 题目代码1.3.1 头插入1.3.2 箭头反转 2.合并两个有序链表&#xff08;21&#xff09;2.1 题目描述2.2 题目分析2.3 题目代码 1. 反转链表&#xff08;206&#xff09;…

视频转音频软件哪个好? 11 个高效的视频转音频转换器分享

网络上拥有数百个值得观看和聆听的音乐视频。但要聆听喜爱的音乐&#xff0c;用户必须观看整个视频&#xff0c;即使只有音乐让他们兴奋。那么&#xff0c;如何从视频中提取音频呢&#xff1f;简单的答案是使用视频到音频转换器将视频转换为音频格式并将其保存在您的设备上以供…

gflags.exe 工具入门详解

gflags.exe 是 Windows 平台上的一个调试工具&#xff0c;它来自 Microsoft Debugging Tools for Windows 工具集。gflags&#xff08;全局标志&#xff09;主要用于设置和管理针对特定进程或系统的调试选项以及性能监视特性。这个工具可以帮助开发者对程序进行更深入的故障排查…