阿雪的学习记录|python图像拼接(spyder)以及module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘问题解决

首先我的环境

Windows10系统
python 3.6.10
spyder 4.1.4
opencv-python 4.3.0.36(我也不知道为啥这个python和cmd里查出来的python版本不一样,呜)
pip 20.1.1(不知道这个相关不相关,应该不相关)

是的,我又开始不务正业了,逛CSDN看到一个图像拼接的帖子,就是这个
就感觉,哇塞,好厉害!这不就是全景拍摄的算法吗!急于求成的我直接复制了他的代码(把他的代码都复制进去,前面加上最最最基础的模块调用就可以:

import cv2
import numpy as np

好了,就可以运行了,运行的时候,首先会出来两张图片单纯的左右拼接,就像美图秀秀那样shai的,这一步用到了这个函数:

np.hstack((img1, img2))

得到了这样的结果:
在这里插入图片描述
是的,我直接用手机拍了我在看这篇博客的场景,这是我的工位,原程序resize了两张图片,被我注释掉了,因为它resize之后图片糊的鸭皮,根本看不出拼接的效果
运行出来这张图片之后,任意按键开始下一个程序,也就是拼接两个图片,用到的函数……好了,代码我没仔细看,反正就是要按下任意按键就可以实现拼接
这时候会出现一个报错:

module 'cv2.cv2' has no attribute 'xfeatures2d'

这个错误出现在代码的这行

sift = cv2.xfeatures2d.SIFT_create()

搜索了很多办法
有说去掉xfeatures2d直接用cv2.SIFT_create()的,试了,不行
有说把opencv和python都降级的,我不想降
也有说要安装opencv-contrib-python的,尝试了安装opencv-contrib-python,由于直接用pip install opencv-contrib-python安装得到的opencv-contrib-python是最新版本,比如我的就是4.几的,所以程序依然会报同样的错

搜索了一轮之后,说要把opencv-python和opencv-contrib-python都降级到3.4.1.15版本,但是我的opencv-python是4.3.0.36的,一下子降那么多……我!不!甘!心!
后来参考了一篇博客底下的一个评论,只需要把opencv-contrib-python降级到3.4.1.15就可以
卸载刚刚安装好的最新版opencv-contrib-python

pip uninstall opencv-contrib-python

安装这个老的可以用的版本

pip install opencv-contrib-python==3.4.1.15

打一把王者就安好了(两分钟)
然后就可以运行了,运行效果还算可以吧,不算理想打算研究研究这个是怎么整的,想试着优化一下,现在可以想到的优化角度大概就是,两张照片衔接重合处做个平滑,但有可能会损失一定的细节信息,但这两张图色泽不同主要是整体光线不一样的问题,如果能自动统一两张图片的自然光滤镜呢,我觉得肯定有大佬早就写出来过相关算法,毕竟早有耳闻连matlab都能p图……
在这里插入图片描述
原文说可以试着把黑色的部分替换成别的颜色什么的,感觉没有这种必要,毕竟黑色部分是无效区域……

在搜索遇到的问题的时候发现SIFT和SURF算法是用于特征点检测的,包括这个图像拼接的功能也是基于特征点检测,然后施展一些魔法,最后实现出来的,感觉其内容和正在研究的东西有一定的相关性,打算研究研究魔法部分的内容

开坑!

每天学一点点,就能少菜一点点,加油( •̀ ω •́ )y

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,你可以使用scatter函数来绘制散点图,使用convhulln函数来计算凸包的坐标,然后使用patch函数将坐标点连接成面,形成包络图。下面是一个示例代码: ```matlab A = importdata('E:\各种数据集\220417\y001.txt'); B = importdata('E:\各种数据集\220417\001yy.txt'); Ax = A(:, 1); Ay = A(:, 2); Az = A(:, 3); Bx = B(:, 1); By = B(:, 2); Bz = B(:, 3); figure; scatter3(Ax, Ay, Az, 'filled', 'MarkerFaceColor', 'r'); hold on; scatter3(Bx, By, Bz, 'filled', 'MarkerFaceColor', 'b'); f = convhulln(A); patch('vertices', A, 'faces', f, 'facecolor', 'r', 'FaceAlpha', 0.3); f1 = convhulln(B); patch('vertices', B, 'faces', f1, 'facecolor', 'b', 'FaceAlpha', 0.3); axis equal; xlabel('X'); ylabel('Y'); zlabel('Z'); title('散点图绘制包络图'); ``` 这段代码会将两组数据点A和B绘制成散点图,并使用convhulln函数计算出A和B的凸包坐标,然后使用patch函数将凸包坐标连接成面,形成包络图。你可以根据自己的数据文件路径进行修改。 #### 引用[.reference_title] - *1* [阿雪学习记录|MATLAB绘制三维离散点包络体](https://blog.csdn.net/baixue1183/article/details/125013589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值