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

news2024/10/3 0:23:01

代码如下

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/simple
 
pip 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.coloradmin.cn/o/1362184.html

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

相关文章

你是唯一的 uniq

文章目录 你是唯一的 uniq语法默认无参数统计出现频次仅仅显示重复的行仅仅显示不重复的行更多信息 你是唯一的 uniq Linux uniq 命令用于检查及删除文本文件中重复出现的行列&#xff0c;一般与 sort 命令结合使用。 官方定义为&#xff1a; uniq - report or omit repeated…

第15课 利用openCV实现人脸识别

这节课&#xff0c;我们再来看一个简单且实用的例子&#xff1a;人脸识别。这个小例子可以让你进一步领略openCV的强悍。 1.复制demo14并改名为demo15。 2.修改capImg函数&#xff1a; int fmle::capImg() {// 加载人脸检测分类器cv::CascadeClassifier faceCascade;faceCas…

网络知识-以太网技术的发展及网络设备

目 录 一、背景介绍 &#xff08;一&#xff09;网络技术的时代 &#xff08;二&#xff09;以太网技术脱颖而出 二、以太网的工作原理 &#xff08;一&#xff09;、载波侦听多路访问&#xff08;CSMA/CD&#xff09; 1、数据发送流程 2、发送过程解析 3、…

1.4 Unity协程

一、先说接口 接口是不能实例化的&#xff0c;想实例化接口&#xff0c;只能实例化继承了接口的类。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace InterfaceTest {interface IMyInterfa…

hutool 的 bigExcelWriter.addSelect 失效

原因:可能是下拉列表的数据过多, 解决办法: 添加辅助列 然后只需要往K列加数据就可以了

ssm基于JSP的网络游戏交易系统的设计与实现+jsp论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;商品管理信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足…

Python基础入门第七课笔记(自定义函数 define)

函数 函数必须先定义再调用 函数必须先定义再调用 函数必须先定义再调用 定义函数&#xff1a; def 函数名&#xff08;形参&#xff09;&#xff1a; 代码1 代码2 ………. 调用函数&#xff1a; 函数名&#xff08;实参&#xff09; 形参&…

浅析观察者模式在Java中的应用

观察者模式&#xff08;Observer Design Pattern&#xff09;,也叫做发布订阅模式&#xff08;Publish-Subscribe Design Pattern&#xff09;、模型-视图&#xff08;Model-View&#xff09;模式、源-监听器&#xff08;Source-Listener&#xff09;模式、从属者&#xff08;D…

吉时利2601A数字源表Keithley 2601A

吉时利2601A源测量单元&#xff08;SMU&#xff09;&#xff0c;也被称为源表&#xff0c;是一种高性能的仪器&#xff0c;能够提供100毫伏至40伏的电压范围&#xff0c;以及100纳至10安的电流范围。这种仪器能够提供的功率高达40.4瓦&#xff0c;使其在台式I-V表征工具或多通道…

VMware中找到存在但是不显示的虚拟机(彻底发现)VMware已创建虚拟机不显示

删除VMware中的虚拟机的时候&#xff0c;可能没有把虚拟机完全删除&#xff0c;或者说 “移除” 后找不到虚拟机在哪里&#xff0c;内存空间也没有得到释放&#xff0c;那该如何解决呢&#xff1f; 1.明确&#xff1a; “移除” 不等于 “从磁盘删除” 移除&#xff1a;只…

篇三:让OAuth2 server支持密码模式

由于Spring-Security-Oauth2停止维护&#xff0c;官方推荐采用 spring-security-oauth2-authorization-server&#xff0c;而后者默认不支持密码授权模式&#xff0c;本篇实战中采用的版本如下&#xff1a; <dependency><groupId>org.springframework.security<…

HarmonOS 通用组件(Button)

本文 我们来看看基础组件中的 Button 这是 ArkTS ui 原生支持的一个组件 用来创建不同样式的按钮 首先 我们还是创建一个最基本的组件结构 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }我们可以在 Column 组件中 加入一个button…

Jmeter相关知识介绍

Jmeter 是Apache 组织开发的基于JAVA 的压力测试工具,用于对软件做压力测试,特别适合于WEB 应用测试(包括压力,接口测试) 今天简单介绍Jemeter的入门相关概念的理解 一、在安装目录下有一个Bin\Jmeter.bat 双击打开 打开之后是一个这样的界面 二、测试计划 1、添加和删…

面试十分钟不到就被赶出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到12月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

【Xilinx FPGA】异步 FIFO 的复位

FIFO&#xff08;First-In-First_Out&#xff0c;先入先出&#xff09;是一种的存储器类型&#xff0c;在 FPGA 开发中通常用于数据缓存、位宽转换或者跨时钟域&#xff08;多 bit 数据流&#xff09;。在使用异步 FIFO 时&#xff0c;应注意复位信号是否遵循相关要求和规范&am…

Mysql show Profiles详解

1.简介 show profile 和 show profiles 命令用于展示SQL语句的资源使用情况&#xff0c;包括CPU的使用&#xff0c;CPU上下文切换&#xff0c;IO等待&#xff0c;内存使用等&#xff0c;这个命令对于分析某个SQL的性能瓶颈非常有帮助&#xff0c;借助于show profile的输出信息&…

啊哈c语言——逻辑挑战9:水仙花数

有一种三位数特别奇怪&#xff0c;这种数的“个位数的立方”加上“十位数的 立方”再加上“百位数的立方”恰好等于这个数。例如&#xff1a; 153111555333&#xff0c;我们为这种特殊的三位数起了一个很好听的名字——“水仙花数”&#xff0c;那么请你找出所有的“水仙花数”…

简易机器学习笔记(四)初识卷积神经网络

前言 第一次写卷积神经网络&#xff0c;也是照着paddlepaddle的官方文档抄&#xff0c;这里简单讲解一下心得。 首先我们要知道之前写的那些东西都是什么&#xff0c;之前写的我们称之为简单神经网络&#xff0c;也就是简单一层连接输出和输出&#xff0c;通过前向计算和逆向…

百度地图打点性能优化(海量点、mapv)

文章目录 百度地图打点性能优化&#xff08;海量点、mapv&#xff09;原因优化方法数据获取方面页面加载方面 参考资料 百度地图打点性能优化&#xff08;海量点、mapv&#xff09; 原因 在百度地图api中&#xff0c;默认的点是下图的红点 而这种点位比较多的时候&#xff0c…

【AI视野·今日Sound 声学论文速览 第三十八期】Mon, 1 Jan 2024

AI视野今日CS.Sound 声学论文速览 Mon, 1 Jan 2024 Totally 5 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers The Arrow of Time in Music -- Revisiting the Temporal Structure of Music with Distinguishability and Unique Orientability as the …