视觉特征--ORB系列

ORB 特征提取算法--理论

ORB 特征提取算法(理论篇) - Alex777 - 博客园

ORB 特征提取算法--实践篇

ORB 特征提取算法(理论篇) - Alex777 - 博客园

Python OpenCV orb特征提取和匹配

OpenCV-Python ORB特征匹配(实践篇)_Loner...的博客-CSDN博客_orb

调整图像大小

python-opencv-图像缩放 - 天子骄龙 - 博客园


import cv2 as cv
import numpy as np

def ORB_Feature(img1, img2):
    # 初始化ORB
    i = 0
    orb = cv.ORB_create()

    # 寻找关键点
    kp1 = orb.detect(img1)
    kp2 = orb.detect(img2)

    # 计算描述符
    kp1, des1 = orb.compute(img1, kp1)
    kp2, des2 = orb.compute(img2, kp2)

    # 画出关键点
    outimg1 = cv.drawKeypoints(img1, keypoints=kp1, outImage=None)
    outimg2 = cv.drawKeypoints(img2, keypoints=kp2, outImage=None)

    # 显示关键点
    # import numpy as np
    # outimg3 = np.hstack([outimg1, outimg2])
    # cv.imshow("Key Points", outimg3)
    # cv.waitKey(0)

    # 初始化 BFMatcher
    bf = cv.BFMatcher(cv.NORM_HAMMING)

    # 对描述子进行匹配
    matches = bf.match(des1, des2)

    # 计算最大距离和最小距离
    min_distance = matches[0].distance
    max_distance = matches[0].distance
    for x in matches:
        if x.distance < min_distance:
            min_distance = x.distance
        if x.distance > max_distance:
            max_distance = x.distance

    # 筛选匹配点
    '''
        当描述子之间的距离大于两倍的最小距离时,认为匹配有误。
        但有时候最小距离会非常小,所以设置一个经验值30作为下限。
    '''
    good_match = []
    for x in matches:
        if x.distance <= max(1.1 * min_distance, 30):
            good_match.append(x)
            i = i + 1

    # 绘制匹配结果
    draw_match(img1, img2, kp1, kp2, good_match)
    print (i)


def draw_match(img1, img2, kp1, kp2, match):
    outimage = cv.drawMatches(img1, kp1, img2, kp2, match, outImg=None)
    cv.imshow("Match Result", outimage)
    cv.waitKey(0)


if __name__ == '__main__':
    # 读取图片
    img1 = cv.imread('E:\Tests\img1.jpg')
    img1 = cv.resize(img1, (960, 640))

    img2 = cv.imread('E:\Tests\img3.jpg')
    img2 = cv.resize(img2, (960, 640))
    ORB_Feature(img1, img2)
 

扩展: ORB特征检测完之后,如何画出并显示。

函数表示:

cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
image    
原始图像,可以使三通道或单通道图像;

keypoints    特征点向量,向量内每一个元素是一个KeyPoint对象,包含了特征点的各种属性信息;
outImage    特征点绘制的画布图像,可以是原图像;
color    绘制的特征点的颜色信息,默认绘制的是随机彩色;
flags    
特征点的绘制模式,其实就是设置特征点的那些信息需要绘制,那些不需要绘制,有以下几种模式可选:

DRAW_MATCHES_FLAGS_DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量。
DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS :单点的特征点不被绘制。
DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:
绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size和方向,是最能显示特征的一种绘制方式。
示例代码:

import cv2
import numpy as np
 
 
def SIFT(img):
    I = cv2.imread(img)
    descriptor = cv2.xfeatures2d.SIFT_create()  # 在2004年,不列颠哥伦比亚大学的D.Lowe在他的论文中提出了一种新的算法,即尺度不变特征变换(SIFT)
    (kps, features) = descriptor.detectAndCompute(I, None)
    cv2.drawKeypoints(I, kps, I, (0, 255, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
    cv2.imshow('img', I)
    cv2.waitKey(0)
    cv2.imwrite('sift_keypoints.jpg', I)
    cv2.destroyAllWindows()
 
 
if __name__ == '__main__':
    SIFT('left.png')
运行结果:

以上代码参考网友的内容,稍加修改,换成orb特征提取和显示部分内容即可

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('E:/Tests/corridor-1.jpg',0)

plt.imshow(img)
plt.show()

# Initiate STAR detector
orb = cv2.ORB_create()

# find the keypoints with ORB
kp = orb.detect(img,None)

# draw only keypoints location,not size and orientation
#img2 = cv2.drawKeypoints(img, kp, None, color=(0,255,0), flags=0)
img2 = cv2.drawKeypoints(img, kp, img, color=None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(img2)
plt.show()

扩展: 用于ORB-SLAM中的orb特征描述和解析

3D视觉(四):ORB特征提取与匹配_Twilight737的博客-CSDN博客3D视觉(四):ORB特征提取与匹配提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录3D视觉(四):ORB特征提取与匹配前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础https://blog.csdn.net/Twilight737/article/details/121860262?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1&utm_relevant_index=3

扩展--特征提取方法

OpenCV探索之路(二十三):特征检测和特征匹配方法汇总 - Madcola - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值