OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 24 课)
在一定的范围内, 无论物体是大还是小, 人眼都可以分辨出来. 而计算机要有相同的能力却很难, 所以要让机器能够对物体在不同尺度下有一个统一的认知, 就需要考虑图像在不同的尺度下都存在的特点.
使用高斯模糊, 不同的 σ 决定了图像的平滑程度, 越大的 σ 值对应的图像越模糊. 通过使用不同的 σ 我们可以实现多分辨率金字塔.
高斯模糊:
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
例子:
import cv2from matplotlib import pyplot as plt# 读取图片img = cv2.imread("face.jpg")# 画图f, ax = plt.subplots(2, 3, figsize=(12, 8))ax[0, 0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))ax[0, 0].set_title("original")ax[0, 0].set_xticks([])ax[0, 0].set_yticks([])# 高斯模糊for i in range(1, 6): # 高斯模糊 image_blur = cv2.GaussianBlur(img, (15, 15), i) # 计算子图 ax[int(i/3), i % 3].imshow(cv2.cvtColor(image_blur, cv2.COLOR_BGR2RGB)) # 标题 ax[int(i/3), i % 3].set_title("σ" + str(i)) ax[int(i/3), i % 3].set_xticks([]) ax[int(i/3), i % 3].set_yticks([])# 展示图片plt.show()
输出结果:
DoG (Difference of Gaussian) 即高斯差分金字塔, 是在高斯金字塔的基础上构建起来的. 通过对高斯金字塔逐层相减, 得到 t-1 的高斯差分金字塔:
DoG 空间极值检测: 将每个像素点和同一层周围的 8 个像素点以及上下两层的 18 个像素点, 共 26 个像素点进行比较. 如果一像素点大于或小于邻近的 26 个像素点的时候, 就成为了极值点.
SIFT (Scale Invariant Feature Transform), 即尺度不变特征变换匹配算法. SIFT 算法对于旋转和尺度具有不变性.
实例化 SHIFT 算法:
cv2.SIFT_create()
获取特征点:
sift.detect(img_gray, None)
绘制特征点:
cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
将特征点转换为128 维的向量:
sift.compute(img, kp)
例子:
import numpy as npimport cv2# 读取图片img = cv2.imread("face.jpg")key_points = img.copy()# 实例化SIFT算法sift = cv2.SIFT_create()# 得到特征点kp = sift.detect(img, None)print(np.array(kp).shape)# 绘制特征点cv2.drawKeypoints(img, kp, key_points)# 图片展示cv2.imshow("key points", key_points)cv2.waitKey(0)cv2.destroyAllWindows()# 保存图片cv2.imwrite("key_points.jpg", key_points)# 计算特征kp, des = sift.compute(img, kp)# 调试输出print(des.shape)print(des[0])
输出结果:
(2183,)(2183, 128)[ 9. 18. 1. 0. 0. 0. 10. 8. 11. 18. 7. 34. 37. 14. 31. 11. 15. 6. 33. 50. 26. 9. 8. 10. 2. 1. 77. 94. 72. 17. 2. 5. 20. 44. 4. 1. 0. 0. 0. 0. 37. 63. 34. 128. 53. 4. 1. 1. 144. 11. 8. 56. 45. 25. 9. 63. 20. 1. 5. 22. 144. 144. 8. 18. 16. 3. 0. 0. 0. 0. 0. 2. 49. 7. 2. 17. 80. 35. 0. 9. 144. 39. 1. 5. 44. 19. 1. 12. 47. 9. 0. 0. 144. 126. 1. 2. 8. 0. 0. 0. 0. 0. 0. 1. 34. 2. 0. 0. 60. 25. 0. 5. 144. 38. 0. 0. 39. 14. 0. 2. 61. 13. 0. 0. 144. 50. 0. 0.]
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/119271.html
☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》 目录 ?️?开讲啦!!!!?️?苏州程序大白?️??博主介绍?前言?讲讲专享小程序有什么优势? ?小程序文件分析?事件绑定?图片问题?轮播图swiper?自定义组件?生命周期?页面生命周期?项目制作?缓冲事件?`es7 async`语法 ?触底事件❄️下拉刷新页面❄️css省略号❄️预览大图❄️购物车模拟❄️获取地...
❤️欢迎订阅《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!❤️ 更多精品专栏简介点这里 治愈生活的良方 就是保持对生活的热爱 前言 哈喽,大家好,我是一条。 每次和女朋友出去玩,拍照是必须的,天气好还行,天气要是不好,加上我这破手机,那拍的简直惨不忍睹,自己都不过去。 但是没什么能难倒程序员的,为了不挨骂,连夜写出去雾...
文章目录 1️⃣前言:追忆我的刷题经历2️⃣算法和数据结构的重要性?1、适用人群?2、有何作用?3、算法简介?4、数据结构 3️⃣如何开始持续的刷题?1、立军令状?❤️?2、培养兴趣?3、狂切水题??4、养成习惯?5、一周出师 4️⃣简单数据结构的掌握?1、数组?2、字符串?3、链表?4、哈希表???5、队列????6、栈?7、二叉树?8、多叉树?9、森林?10、树状数组?11、...
摘要:安装我们可以使用库中的函数实现,但由于专利保护,很多版本的库已无法提供该函数,目前仅版本的库可使用此函数。算法选择其中最优的四个点程序结果 本文侧重于如何使用Pyt...
?????? ???Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照??? ???CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习 ?入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!??? ?最后,愿我们都能在看不到的地方闪闪发光,一起加油进步??? ???一万次悲伤,依然会有Dream,我一直在最温暖的地方等你,唱的就是我!哈哈哈~...
阅读 792·2023-04-25 22:27
阅读 726·2021-11-22 14:56
阅读 741·2021-11-11 16:54
阅读 3126·2021-09-06 15:01
阅读 1465·2019-08-30 15:54
阅读 3389·2019-08-30 13:20
阅读 1101·2019-08-30 10:55
阅读 1963·2019-08-26 13:34