opencv学习——cv2.xfeatures2d.SIFT_create().detectAndCompute()
来源:互联网 发布:linux内核的优化 编辑:程序博客网 时间:2024/05/23 11:21
import cv2import numpy as npdef SIFT(img): I = cv2.imread(img)# gray = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY) descriptor = cv2.xfeatures2d.SIFT_create() (kps, features) = descriptor.detectAndCompute(I, None)# kps = np.float32([kp.pt for kp in kps])cv2.drawKeypoints(I,kps,I,(0,255,255),flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)# cv2.drawKeypoints(I,kps,I,(0,255,255)) cv2.imwrite('sift_keypoints.jpg',I)if __name__ == '__main__': img = 'images/1.jpg' SIFT(img)
1、OpenCV 也提供了绘制关键点的函数: cv2.drawKeyPoints(),它可以在关键点的部位绘制一个小圆圈。如果你设置参数为 cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_就会绘制代表关键点大小的圆圈甚至可以绘制除关键点的方向。
第一个参数image:原始图像,可以使三通道或单通道图像;
第二个参数keypoints:特征点向量,向量内每一个元素是一个KeyPoint对象,包含了特征点的各种属性信息;
第三个参数outImage:特征点绘制的画布图像,可以是原图像;
第四个参数color:绘制的特征点的颜色信息,默认绘制的是随机彩色;
第五个参数flags:特征点的绘制模式,其实就是设置特征点的那些信息需要绘制,那些不需要绘制,有以下几种模式可选:
DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就 是一个初始化好了的,size与type都是已经初始化好的变量
NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制
DRAW_RICH_KEYPOINTS:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐 标,size,和方向,是最能显示特征的一种绘制方式。
2、这里的kps就是关键点。它所包含的信息有:
angle:角度,表示关键点的方向,通过Lowe大神的论文可以知道,为了保证方向不变形,SIFT算法通过对关键点周围邻域进行梯度运算,求得该点方向。-1为初值。
class_id:当要对图片进行分类时,我们可以用class_id对每个特征点进行区分,未设定时为-1,需要靠自己设定
octave:代表是从金字塔哪一层提取的得到的数据。
pt:关键点点的坐标
response:响应程度,代表该点强壮大小,更确切的说,是该点角点的程度。
size:该点直径的大小
- opencv学习——cv2.xfeatures2d.SIFT_create().detectAndCompute()
- opencv学习——cv2.drawMatches()与cv2.drawMatchesKnn()区别
- opencv学习——cv2.findHomography()
- opencv学习——cv2.imshow()显示图片
- opencv学习——fft用numpy和cv2
- 如何用anaconda安装cv2(python—opencv)
- OpenCV函数学习之cv2.absdiff
- opencv.cv2.findContours()函数
- opencv cv2.THRESH_OTSU 二值化
- opencv,cv2.putText()用法
- python opencv cv2.
- 走进Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()
- mac安装cv2(即opencv)
- opencv: cv2.resize 探究(源码)
- Ubuntu下安装Opencv(cv2)
- opencv: 图像缩放(cv2.resize)
- openCV库cv2的使用
- opencv: cv2.applyColorMap 伪色彩
- word转HTML 升级版
- JSP完成数据分页显示
- linux中静态动态获取网络
- Linux学习日记-
- 线程中的问题
- opencv学习——cv2.xfeatures2d.SIFT_create().detectAndCompute()
- 2017.10.19开学第八周周中训练总结
- CSS 构造文本
- 查看linux系统是32位还是64位
- LeetCode-169:Majority Element (数组中的多数元素)
- java中统计一个字符串串在另一个字符串中出现的次数
- 二叉树系列六:求二叉树的宽度
- win10下vs2013+DLib机器学习库安装及配置
- 斐波那契数列递归与非递归实现(JAVA语言描述)