zoukankan      html  css  js  c++  java
  • 【opencv】利用opencv进行图像识别与定位

    SIFT检测方法

    SIFT算法就是把图像的特征检测出来,通过这些特征可以在众多的图片中找到相应的图片

    import cv2
    #读取图片,以1.png为例
    img=cv2.imread('1.png')
    #检测关键点并计算描述
    sift=cv2.xfeatures2d.SIFT_create()
    #描述符是对关键点的描述,可用于图片匹配
    keypoints,descriptor=sift.detectAndCompute(img,None)
    #将关键点勾画到图片上
    flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT
    color=(0,255,0)
    
    #参数image代表原始图片
    #参数outImage是指输出在哪张图片上
    #参数keypoints代表图片的关键点
    #参数flags代表关键点的勾画方式
    #参数color代表勾画的色彩模式
    img=cv2.drawKeypoints(image=img,outImage=img,keypoints=keypoints,flags=flags,color=color)
    
    #显示图片
    cv2.imshow('sift_keypoints',img)
    cv2.waitKey()

    将上图处理过后,就变为了如下所示

     

    下面图像特征检测选择SIFT算法,图像匹配算法选择FLANN算法,:

    用此图像2.png与下图1.png进行匹配

    import cv2
    img1=cv2.imread('1.png')
    img2=cv2.imread('2.png')
    #使用SIFT算法获取图像特征的关键点和描述符
    sift=cv2.xfeatures2d.SIFT_create()
    kp1,des1=sift.detectAndCompute(img1,None)
    kp2,des2=sift.detectAndCompute(img2,None)
    
    #定义FLANN匹配器
    indexParams=dict(algorithm=0,trees=10)
    searchParams=dict(checks=50)
    flann=cv2.FlannBasedMatcher(indexParams,searchParams)
    #使用KNN算法实现图像匹配,并对匹配结果排序
    matches=flann.knnMatch(des1,des2,k=2)
    matches=sorted(matches,key=lambda x:x[0].distance)
    
    #去除错误匹配,0.5是系数,系数大小不同,匹配的结果页不同
    goodMatches=[]
    for m,n in matches:
        if m.distance<0.5*n.distance:
            goodMatches.append(m)
    
    #获取某个点的坐标位置
    #index是获取匹配结果的中位数
    index=int(len(goodMatches)/2)
    #queryIdx是目标图像的描述符索引
    x,y=kp1[goodMatches[index].queryIdx].pt
    #将坐标位置勾画在2.png图片上,并显示
    cv2.rectangle(img1,(int(x),int(y)),int(x)+5,int(y)+5),(0,255,0),2)
    cv2.imshow('baofeng',img1)
    cv2.waitKey()

    匹配完毕,迷你特工队封面图上红色的特工下巴那里出现了一个绿点,若无法匹配则会报错

  • 相关阅读:
    nginx日志格式
    nginx默认虚拟主机
    php各种编译错误汇总
    php.ini中最好禁止的一些函数
    php常用的操作
    快速扫描某个服务器上所有开放端口
    LOJ6303:水题——题解
    BZOJ5323 & 洛谷4562:[JXOI2018]游戏——题解
    BZOJ5333:[SDOI2018]荣誉称号——题解
    LOJ2587:[APIO2018]铁人两项——题解
  • 原文地址:https://www.cnblogs.com/ffrs/p/11347918.html
Copyright © 2011-2022 走看看