前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用openCV提取sift;surf;hog特征

使用openCV提取sift;surf;hog特征

作者头像
MachineLP
发布于 2022-05-09 06:59:44
发布于 2022-05-09 06:59:44
56900
代码可运行
举报
文章被收录于专栏:小鹏的专栏小鹏的专栏
运行总次数:0
代码可运行

cv2.SIFT()

cv2.SURF()

cv2.HOGDescriptor()

使用cv2.SIFT的一个样例:(cv2.SURF使用与之类似)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8  
import cv2  
import scipy as sp  
  
img1 = cv2.imread('x1.jpg',0) # queryImage  
img2 = cv2.imread('x2.jpg',0) # trainImage  
  
# Initiate SIFT detector  
sift = cv2.SIFT()  
  
# find the keypoints and descriptors with SIFT  
kp1, des1 = sift.detectAndCompute(img1,None)  
kp2, des2 = sift.detectAndCompute(img2,None)  
  
# FLANN parameters  
FLANN_INDEX_KDTREE = 0  
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)  
search_params = dict(checks=50)   # or pass empty dictionary  
flann = cv2.FlannBasedMatcher(index_params,search_params)  
matches = flann.knnMatch(des1,des2,k=2)  
  
print 'matches...',len(matches)  
# Apply ratio test  
good = []  
for m,n in matches:  
    if m.distance < 0.75*n.distance:  
        good.append(m)  
print 'good',len(good)  
# #####################################  
# visualization  
h1, w1 = img1.shape[:2]  
h2, w2 = img2.shape[:2]  
view = sp.zeros((max(h1, h2), w1 + w2, 3), sp.uint8)  
view[:h1, :w1, 0] = img1  
view[:h2, w1:, 0] = img2  
view[:, :, 1] = view[:, :, 0]  
view[:, :, 2] = view[:, :, 0]  
  
for m in good:  
    # draw the keypoints  
    # print m.queryIdx, m.trainIdx, m.distance  
    color = tuple([sp.random.randint(0, 255) for _ in xrange(3)])  
    #print 'kp1,kp2',kp1,kp2  
    cv2.line(view, (int(kp1[m.queryIdx].pt[0]), int(kp1[m.queryIdx].pt[1])) , (int(kp2[m.trainIdx].pt[0] + w1), int(kp2[m.trainIdx].pt[1])), color)  
  
cv2.imshow("view", view)  
cv2.waitKey()  
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cv2.HOGDescriptor()的例子:还可以参考:https://www.programcreek.com/python/example/84776/cv2.HOGDescriptor
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def createTrainingInstances(self, images):
		start = time.time()
		hog = cv2.HOGDescriptor()
		instances = []
		for img, label in images:
			# print img
			img = read_color_image(img)
			img = cv2.resize(img, (128, 128), interpolation = cv2.INTER_AREA)
			descriptor = hog.compute(img)
			if descriptor is None:
				descriptor = []
			else:
				descriptor = descriptor.ravel()
			pairing = Instance(descriptor, label)
			instances.append(pairing)
		end = time.time() - start
		self.training_instances = instances
		print "HOG TRAIN SERIAL: %d images -> %f" % (len(images), end) 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def createTestingInstances(self, images):
		start = time.time()
		hog = cv2.HOGDescriptor()
		instances = []
		for img, label in images:
			# print img
			img = read_color_image(img)
			img = cv2.resize(img, (128, 128), interpolation = cv2.INTER_AREA)
			descriptor = hog.compute(img)
			if descriptor is None:
				descriptor = []
			else:
				descriptor = descriptor.ravel()
			pairing = Instance(descriptor, label)
			instances.append(pairing)
		end = time.time() - start
		self.testing_instances = instances
		print "HOG TEST SERIAL: %d images -> %f" % (len(images), end) 

还有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_hog(image):
    # winSize = (64,64)
    winSize = (image.shape[1], image.shape[0])
    blockSize = (8,8)
    # blockSize = (16,16)
    blockStride = (8,8)
    cellSize = (8,8)
    nbins = 9
    derivAperture = 1
    winSigma = 4.
    histogramNormType = 0
    L2HysThreshold = 2.0000000000000001e-01
    gammaCorrection = 0
    nlevels = 64
    hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins,derivAperture,winSigma,
                            histogramNormType,L2HysThreshold,gammaCorrection,nlevels)
    #compute(img[, winStride[, padding[, locations]]]) -> descriptors
    winStride = (8,8)
    padding = (8,8)
    locations = [] # (10, 10)# ((10,20),)
    hist = hog.compute(image,winStride,padding,locations)
    return hist
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV:图像检索。
图像特征就是指有意义的图像区域,具有独特性或易于识别性,比如角点、斑点以及高密度区。
小F
2020/10/09
1.3K0
OpenCV:图像检索。
HOG特征详解与行人检测
HOG(Histogram of Oriented Gradient)特征在对象检测与模式匹配中是一种常见的特征提取算法,是基于本地像素块进行特征直方图提取的一种算法,对象局部的变形与光照影响有很好的稳定性,最初是用HOG特征来来识别人像,通过HOG特征提取+SVM训练,可以得到很好的效果,OpenCV已经有了。HOG特征提取的大致流程如下:
OpenCV学堂
2019/04/29
3.6K0
HOG特征详解与行人检测
对极几何
算法:对极几何是是“两幅图像之间的对极几何”,图像平面与以基线为轴的平面束的交的几何(基线是指连接摄像机中心的直线)。
裴来凡
2022/05/29
3510
对极几何
HOG原理与OpenCV实现
方向梯度直方图(Histogram of Oriented Gradient, HOG)于2005年提出,是一种常用的特征提取方法,HOG+SVM在行人检测中有着优异的效果。
chaibubble
2022/05/07
1.9K0
HOG原理与OpenCV实现
图像配准:从SIFT到深度学习
图像配准(Image Registration)是计算机视觉中的基本步骤。在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法。
磐创AI
2019/07/30
8.3K1
图像配准:从SIFT到深度学习
【论文复现】进行不同视角图像的拼接
无论对于日常的娱乐需求还是一些专业性的测绘工作,都需要我们基于这些“残缺”的图片来构建出完整的图像。
Eternity._
2024/12/28
1640
【论文复现】进行不同视角图像的拼接
实战角度!图片去水印及图片匹配替换几种方法分析
最近手上有一批图片需要去水印,同时也要对于大图中某个小部分做替换。之前网站的很多图片水印的处理方式都比较简单粗暴,确定水印加在图片上的大致位置,然后做一个不透明度100%的图片覆盖上去,完美解决问题,但是不理想的地方也显而易见,用户观感特别不好。所以,借着这次处理的机会,想把问题根除掉。本文会分四部分,零部分(你没有看错!)主要是自己尝试的路径,如果想简单直接,不失为一种有效方式。第一部分把可以应用的计算机视觉领域可能会用到的算法或者对思路有拓展的算法进行总结,同时对于有些算法的使用过程中遇到的问题,结合我自己的实战经验给出一些实践避坑指南。第二部分,对应第一部分的总结,会给出通用的实现demo,第三部分,会对本文进行总结,相信你在图片匹配替换或者去水印领域遇到相关问题,我的文章都能给你些许思路。
用户1413827
2023/11/28
4550
实战角度!图片去水印及图片匹配替换几种方法分析
rgbd-slam_slam算法详解
算法输入:last frame 的深度图和rgb图 和current frame rgb图
全栈程序员站长
2022/09/30
4530
rgbd-slam_slam算法详解
快乐学AI系列——计算机视觉(5)图像分类和识别
传统图像分类算法的两种方法:SIFT特征+KNN分类器和HOG特征+SVM分类器。
MATRIX.矩阵之芯
2023/04/06
7190
快乐学AI系列——计算机视觉(5)图像分类和识别
HOG特征可视化
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/chaipp0607/article/details/79843786
chaibubble
2019/05/26
9510
单应性Homograph估计:从传统算法到深度学习
单应性原理被广泛应用于图像配准,全景拼接,机器人定位SLAM,AR增强现实等领域。这篇文章从基础图像坐标知识系为起点,讲解图像变换与坐标系的关系,介绍单应性矩阵计算方法,并分析深度学习在单应性方向的进展。
3D视觉工坊
2020/11/11
2.1K0
单应性Homograph估计:从传统算法到深度学习
OpenCV SIFT特征算法详解与使用
SIFT特征是非常稳定的图像特征,在图像搜索、特征匹配、图像分类检测等方面应用十分广泛,但是它的缺点也是非常明显,就是计算量比较大,很难实时,所以对一些实时要求比较高的常见SIFT算法还是无法适用。如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值得我们学习,对我们也有很多有益的启示,本质上SIFT算法是很多常见算法的组合与巧妙衔接,这个思路对我们自己处理问题可以带来很多有益的帮助。特别是SIFT特征涉及到尺度空间不变性与旋转不变性特征,是我们传统图像特征工程的两大利器,可以扩展与应用到很多图像特征提取的算法当中,比如SURF、HOG、HAAR、LBP等。夸张一点的说SIFT算法涵盖了图像特征提取必备的精髓思想,从特征点的检测到描述子生成,完成了对图像的准确描述,早期的ImageNet比赛中,很多图像分类算法都是以SIFT与HOG特征为基础,所有SIFT算法还是值得认真详细解读一番的。SIFT特征提取归纳起来SIFT特征提取主要有如下几步:
OpenCV学堂
2019/04/29
8.7K0
OpenCV SIFT特征算法详解与使用
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
目录 1,图像特征 2,角点特征 3,使用OpenCV和PIL进行特征提取和可视化 4,特征匹配 5,图像拼接
deephub
2020/05/09
4K0
熟练掌握CV中最基础的概念:图像特征,看这篇万字的长文就够了
空间解析:多视角几何在3D打印中的应用
多视角几何是计算机视觉中的一个分支,它涉及到从多个视角捕获的二维图像中恢复出三维结构。这项技术在3D打印领域中发挥着至关重要的作用,它允许从现有的二维图像或通过多视角拍摄创建出三维模型,进而可以被3D打印机所使用。本文将探讨多视角几何技术在3D打印中的具体应用。
数字扫地僧
2024/05/04
2400
OpenCV图像识别在自动化测试中实践
自动化测试使用过程中,发现很多App无法获取到控件、资源ID等内部资源,而目前主要的移动端自动化测试工具基本都是基于获取内部控件元素来进行操作。因此,传统的测试框架和工具无法满足项目组游戏自动化测试的需求。
清风穆云
2021/08/09
3.7K0
SIFT暴力匹配
算法:SIFT暴力匹配是通过识别两个图像之间的SIFT关键点最近的邻居来进行匹配。但在某些情况下,由于噪声等因素,第二个最接近的匹配似乎更接近第一个匹配。在这种情况下,计算最近距离与第二最近距离的比率,并检验它是否大于0.8。如果比率大于0.8,则表示拒绝。这有效地消除了约90%的错误匹配,且只有约5%的正确匹配。
裴来凡
2022/05/28
5630
SIFT暴力匹配
OpenCV4.4 中SIFT特征匹配调用演示
大家好,听说OpenCV4.4 已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了。如果你还不知道SIFT特征是什么,就看这里的这篇文章就好啦。
OpenCV学堂
2020/08/06
3.1K0
FLANN图像匹配
算法:FLANN图像匹配是基于SIFT或者是SURF特征检测算法的一种图像匹配方法,具有旋转不变性、光照不变性和尺度不变性。FLANN库,全称是Fast Library for Approximate Nearest Neighbors,是目前最完整的(近似)最近邻开源库,不但实现了一系列查找的算法,还包含了一种自动选取最快算法的机制。
裴来凡
2022/09/21
7960
FLANN图像匹配
OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
opencv4.5.1中最令人兴奋的特性之一是BEBLID(Boosted effective Binary Local Image Descriptor),它是一种新的描述符,能够在减少执行时间的同时提高图像匹配精度!本文将向你展示一个具体的例子,所有源代码都存储在此GitHub存储库中:
AI算法与图像处理
2021/04/21
1.2K0
OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
HOG 特征
✔️ 为了提高检测器对关照等干扰因素的鲁棒性,需要对图像进行Gamma矫正,完成对整个图像的归一化,调整对比度,降低噪声影响;
为为为什么
2022/10/27
9650
HOG 特征
相关推荐
OpenCV:图像检索。
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验