• 【CV学习4】OpenCVPython: SIFT Demo one


    # -*-coding:utf-8-*-
    #author: lyp time: 2018/7/31
    import cv2
    import numpy as np
    
    img = cv2.imread('SLAM DUNK.jpg')
    
    grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度图像
    
    sift = cv2.xfeatures2d.SIFT_create()  # 用SIFT类来创建一个SIFT对象
    kp = sift.detect(grayImg, None)  # 检测关键点
    _, des = sift.compute(grayImg, kp)  # 计算关键点描述
    
    cv2.drawKeypoints(img, kp, img)  # 根据关键点和描述画出关键点
    cv2.imshow('Key Points', img)
    
    cv2.waitKey()
    cv2.destroyAllWindows()

    0.前言

    从OpenCV3 开始,SIFT之类的算法已经移除了release,转而放到了contrib的xfeatures里,所以在进行本章及其以后的编程时候,需要先卸载之前安装的Opencv-python版本(如果你是跟着我之前博客里面的话,就没必要卸载啦),然后运行pip install opencv-contrib-python==3.3.1.11。具体步骤可以参考https://www.cnblogs.com/gfgwxw/p/9309920.html

    1. 程序详解

     a. 创建一个SIFT的对象

    retval=cv2.xfeatures2d.SIFT_create([, nfeatures[, nOctaveLayers[, contrastThreshold[, edgeThreshold[, sigma]]]]])

    b.检测关键点
    keypoints=cv2.Feature2D.detect(image[, mask])
    image: 源图像
    mask:掩膜
    keypoints: 关键点向量

    c.计算关键点的描述
    keypoints, descriptors=cv2.Feature2D.compute(image, keypoints[, descriptors])
    keypoints: 已知的关键点向量
    descriptors:关键点描述向量

    d.根据关键点和描述画出关键点
    outImage=cv2.drawKeypoints(image, keypoints, outImage[, color[, flags]])
    outImage: 输出图像,画好的那种
    image: 源图像
    keypoints: 关键点向量
    color: 颜色
    flags: 各种属性值
    cv2.DRAW_MATCHES_FLAGS_DEFAULT, 自动创建输出图像 关键点的尺寸和方向不会被画出
    cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, 画出关键点、尺寸和方向
    cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, 手动创建输出图像
    cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS 单一的关键点将不被画出
    2.注意
    彩色图像转化为灰度图像
      为了降低算法的复杂度,SIFT算法的第一步就是将传入的彩色图像转化为灰度图像

    3.感谢
    https://zhuanlan.zhihu.com/c_154380889

  • 相关阅读:
    PHP全栈学习笔记3
    PHP全栈学习笔记3
    JavaScript基础系列
    JavaScript基础系列
    Java语言
    Java语言
    HTML基础系列
    HTML基础系列
    PHP全栈从入门到精通1
    PHP全栈从入门到精通1
  • 原文地址:https://www.cnblogs.com/gfgwxw/p/9399668.html
Copyright © 2020-2023  润新知