harris,sift,surf,orb特征点检测算法

本文介绍了计算机视觉中常用的特征点检测算法,包括Harris角点检测、SIFT、SURF和ORB等,展示了如何使用OpenCV库在图像中检测和绘制特征点,适用于图像匹配和目标识别等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特征点检测算法

Harris角点检测

cv2.cornerHarris(gray,blockSize=4,ksize=5,k=0.04)
import cv2
import matplotlib.pyplot as plt
import numpy as np

def cv_show(name,image):
    """图像显示函数
    name:字符串,窗口名称
    img:numpy.ndarray,图像
    """
    cv2.namedWindow(name,cv2.WINDOW_NORMAL)
    cv2.imshow(name,image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__=="__main__":
    img = cv2.imread('.\data\Box.jpg')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    gray = np.float32(gray)
    # 角点检测
    dst = cv2.cornerHarris(gray,blockSize=4,ksize=5,k=0.04)
    # 对角点进行膨胀操作
    dst = cv2.dilate(dst,None)
    img[dst>0.01*dst.max()] = [0,0,255]
    # 显示图像
    cv_show('Harris Corners',img)
 

                           14657665-cec9e2e3c8cdebe8.jpg

 

SIFT特征检测

import cv2
import numpy as np

def cv_show(name,image):
    """图像显示函数
    name:字符串,窗口名称
    img:numpy.ndarray,图像
    """
    cv2.namedWindow(name,cv2.WINDOW_NORMAL)
    cv2.imshow(name,image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__=="__main__":
    img = cv2.imread('.\data\975-1.jpg')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    sift = cv2.xfeatures2d.SIFT_create()
    keypoints,descriptor = sift.detectAndCompute(gray,None)
    # 在图上绘制关键点
    img = cv2.drawKeypoints(image=img,outImage=img,keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,color=(255,255,0))
    cv_show('sift_keypoints',img)
    cv2.imwrite('.\opencv_python\SIFT.jpg',img)
 
           14657665-58d1f8f6addb5b05.jpg
 

SURF特征检测

import cv2
import numpy as np

def cv_show(name,image):
    """图像显示函数
    name:字符串,窗口名称
    img:numpy.ndarray,图像
    """
    cv2.namedWindow(name,cv2.WINDOW_NORMAL)
    cv2.imshow(name,image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
if __name__=="__main__":
    img = cv2.imread('.\data\975-1.jpg')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    surf = cv2.xfeatures2d.SURF_create(8000)
    keypoints,descriptor = surf.detectAndCompute(gray,None)
    
    img = cv2.drawKeypoints(image=img,outImage=img,keypoints=keypoints,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,color=(255,255,0))
    cv_show('surf_keypoints',img)
    cv2.imwrite('.\opencv_python\SURF.jpg',img)
 
          14657665-0268a937d70cb23c.jpg
 

ORB特征检测

def img_show(name,image):
    """matplotlib图像显示函数
    name:字符串,图像标题
    img:numpy.ndarray,图像
    """
    if len(image.shape) == 3:
        image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.imshow(image,'gray')
    plt.xticks([])
    plt.yticks([])
    plt.xlabel(name,fontproperties='FangSong',fontsize=12)
 
if __name__=="__main__":
    img1 = cv2.imread('.\data\974-1.jpg')
    img2 = cv2.imread('.\data\975-1.jpg')
    gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
    gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    orb = cv2.ORB_create()
    kp1,des1 = orb.detectAndCompute(gray1,None)
    kp2,des2 = orb.detectAndCompute(gray2,None)
    bf = cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)
    matches = bf.match(des1,des2)
    matches = sorted(matches,key=lambda x:x.distance)
    img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:80],img2,flags=2)
    plt.figure(figsize=(60,80),dpi=80)
    img_show('',img3)
    
 
14657665-ac29796f5d2d1b6d.png
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陨星落云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值