【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.hqwc.cn/news/325746.html

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

相关文章

在云服务器ECS上用Python写一个搜索引擎

在云服务器ECS上用Python写一个搜索引擎 一、场景介绍二、搜索引擎的组成2.1 网页的爬取及排序2.2 用户使用搜索引擎进行搜索 三、操作步骤3.1 环境准备3.2 安装Anaconda3.3 安装Streamlit3.4 下载搜索引擎代码3.5 运行搜索引擎 四、常见问题4.1 运行setup.py时可能的问题4.2 如…

Vue2 - computed 和 method 的原理区别

目录 1&#xff0c;简单对比2&#xff0c;原理的不同1&#xff0c;method 的处理2&#xff0c;computed 的处理实现缓存触发更新 3&#xff0c;触发更新时的问题 1&#xff0c;简单对比 computed 当做属性使用&#xff0c;method 当做方法使用。computed 可以提供 getter 和 s…

一文读懂 $mash 通证 “Fair Launch” 规则(幸运池玩法解读篇)

Solmash是Solana生态中由社区主导的铭文资产LaunchPad平台&#xff0c;该平台旨在为Solana原生铭文项目&#xff0c;以及通过其合作伙伴SoBit跨链桥桥接到Solana的Bitcoin生态铭文项目提供更广泛的启动机会。有了Solmash&#xff0c;将会有更多的Solana生态的铭文项目、资产通过…

MediaPipeUnityPlugin Win10环境搭建(22年3月的记录,新版本已完全不同,这里只做记录)

https://github.com/homuler/MediaPipeUnityPlugin You cannot build libraries for Android with the following steps. 1、安装msys2配置系统环境变量Path添加 C:\msys64\usr\bin 执行 pacman -Su 执行 pacman -S git patch unzip 2、安装Python3.9.10 勾选系统环境变量 …

提升图像分割精度:学习UNet++算法

文章目录 一、UNet 算法简介1.1 什么是 UNet 算法1.2 UNet 的优缺点1.3 UNet 在图像分割领域的应用 二、准备工作2.1 Python 环境配置2.2 相关库的安装 三、数据处理3.1 数据的获取与预处理3.2 数据的可视化与分析 四、网络结构4.1 UNet 的网络结构4.2 UNet 各层的作用 五、训练…

【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

引导过程的解析以及如何利用systemd去管理nginx

bios加电自检------mbr--------grub-------加载内核文件------启动第一个进程 bios的主要作用&#xff1a;检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 boot开机启动项顺序&#xff0c;你可以把内核文件放在何处&#xff1f; 1.硬盘 …

Pycharm打包程序为exe文件

Pycharm打包程序为exe文件 【一】导入模块pyinstaller 【1】图片说明 【2】文字说明 根据图片顺序执行 首先点击file进入settings界面&#xff0c;在setting界面找到Project下面的Python Interpretor&#xff0c;点击号进行模块的添加在搜索框中输入pyinstaller&#xff0c;…

算法导论复习——CHP16 贪心算法

定义 每一步都做出当前看来最优的操作。 问题引入——活动选择问题 问题描述 活动选择问题就是对给定的包含n个活动的集合S&#xff0c;在已知每个活动开始时间和结束时间的条件下&#xff0c;从中选出最多可兼容活动的子集合&#xff0c;称为最大兼容活动集合。 不失一般性&a…

2023年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分…

Huggy Lingo: 利用机器学习改进 Hugging Face Hub 上的语言元数据

太长不看版: Hub 上有不少数据集没有语言元数据&#xff0c;我们用机器学习来检测其语言&#xff0c;并使用 librarian-bots 自动向这些数据集提 PR 以添加其语言元数据。 Hugging Face Hub 已成为社区共享机器学习模型、数据集以及应用的存储库。随着 Hub 上的数据集越来越多&…

Redis第四讲——Redis的数据库结构、删除策略及淘汰策略

一、redis中的数据库 redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中。db数组的每项都是一个redis.h/redisDb结构&#xff0c;而每个redisDb结构就代表一个数据库。在初始化服务器时&#xff0c;程序会根据服务器状态的dbnum属性来决定应该创建多…