# -*- encoding=utf-8 -*-
__author__ = 'Jeff.xie'#这个方法识别度更高,比cv2.matchTemplate更好,
#cv2.matchTemplate无定位的图片,这个方法可以
import cv2
# bgPath='D:\\Reg_Card_007_IOS_02.png'
# desPath='D:\\ReportLostCard.png'
bgPath='D:\\Setting.png'
desPath='D:\\Connect.png'
img1=cv2.imread(bgPath)  #大图
img2=cv2.imread(desPath)
#使用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)
print(len(matches))
print(len(goodMatches))
#获取某个点的坐标位置
#index是获取匹配结果的中位数
index=int(len(goodMatches)/2)
#queryIdx是目标图像的描述符索引
x,y=kp1[goodMatches[0].queryIdx].pt  #获取小图片中心点
#将坐标位置勾画在2.png图片上,并显示
src_img = cv2.imread(bgPath,cv2.IMREAD_GRAYSCALE)
height,width = src_img.shape
print("width:",width)
print("height:",height)
des_img = cv2.imread(desPath,cv2.IMREAD_GRAYSCALE)
des_height,des_width = des_img.shape
print("des_width:",des_width)
print("des_height:",des_height)
print(x)
print(y)
xper = int(x/width*100)
yper = int(y/height*100)
print("xper",xper)
print("yper",yper)
x1 = int(x-des_width/2)
y1 = int(y-des_height/2)
x2 = int(x+des_width/2)
y2 = int(y+des_height/2)
# cv2.rectangle(img1,(int(x),int(y)),(int(x)+50,int(y)+50),(0,255,0),2)
cv2.rectangle(img1,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imshow('baofeng',img1)
cv2.waitKey()
import cv2
#读取图片,以D:\\Battery.png为例
img=cv2.imread('D:\\Battery.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(0)

Python使用opencv实现图片定位第三种方式相关推荐

  1. 实现精灵图片绝对定位的三种方式(伪)

    精灵图片绝对定位的三种方式(伪) 有强迫症的我为此困扰了一上午,说白了还是自己实力不够,想法总被局限. 实现结果如上图中间的为最终满意样品 整体用列表写的` 左1: 把整体看成一个背景图加上面文字: ...

  2. python的命名空间_python中命名空间的三种方式介绍(附示例)

    本篇文章给大家带来的内容是关于python中命名空间的三种方式介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. python中的命名空间分三种: 内置的命名空间,在启动解 ...

  3. html一般用那种方式定位,使用三种方式定位html中的元素

    使用三种方式定位html中的元素 发布时间:2020-06-06 14:46:00 来源:51CTO 阅读:687 作者:知止内明 1)使用三种方式定位html中的元素 a)通过ID $(" ...

  4. python中判断文件是否存在的三种方式_Python中判断文件是否存在的方法

    Python中判断文件是否存在的方法 发布时间:2020-08-06 11:15:42 来源:亿速云 阅读:58 作者:小新 这篇文章主要介绍Python中判断文件是否存在的方法,文中介绍的非常详细, ...

  5. 视频解码opencv、ffmpeg、decord三种方式速度对比

    在做视频理解和视频相关的项目都绕不开视频解码的过程,本文对比了三种视频解码的方法,仅供参考. # -*- coding: utf-8 -*- # @Time : 2020年9月30日16:01:40 ...

  6. Android实现加载(loading)图片旋转的三种方式

    我们在Android应用开发中可能经常用到类似如下效果的加载过程中的图片旋转效果: 上面的图片是一张gif格式的动态图片,我们知道,在Android中对gif动态图片的支持是不好的.可以通过第三方ja ...

  7. html背景图像定位的三种方式,CSS秘密花园:灵活的背景定位

    <CSS Secrets>是@Lea Verou最新著作,这本书讲解了有关于CSS中一些小秘密.是一本CSSer值得一读的一本书,经过一段时间的阅读,我.@南北和@彦子一起将在W3cplu ...

  8. 对于图片压缩的 三种方式

    android 图片压缩方法: 第一:质量压缩法: 复制代码 代码如下: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStr ...

  9. android图片压缩的三种方式

    为了避免oom的出现,几乎每个应用都会对大图进行压缩,我现在手头做的产品就有很多地方用到,以前封装工具类的时候,都是在网上找东找西,然后拼拼凑凑,有效果就行了,一直用的迷迷糊糊,这几天工作比较闲,正好 ...

最新文章

  1. python使用socket实现协议TCP长连接框架
  2. “偷懒”上热搜!南京大三学生自制宿舍关灯神器火了,网友:希望量产
  3. php 字符串的处理
  4. 自学HTML5第三节(拖放效果)
  5. 静态初始化块的执行顺序
  6. Topo系统的益处和帮助
  7. OpenCV学习笔记三-Mat数据结构
  8. 怎样才能娶到比尔-盖茨的女儿
  9. Java代码风格:最终决定
  10. 突发!哈佛要求本科生5天内搬走,国际学生恐无家可归
  11. python2.7 与 go1.2简单性能比较
  12. 浅谈LoRa,LoRaWAN,NB-IoT三类物联网技术
  13. 无穷大8字型曲线方程
  14. # Vue 组件开发打包、Vue 项目打包、js库组件库打包使用
  15. mysql根据身份证号计算年龄
  16. gmail谷歌邮箱开启SMTP
  17. RGB色彩,HSV色彩模式、灰度图,亮度,对比度,饱和度、图像平滑、降噪、锐化、增强
  18. 关于SCN引起DBLINK的问题解决方法说明--打补丁
  19. java中整数的整数次方_数值的整数次方java
  20. RabbitMQ第四个实操小案例——DirectExchange

热门文章

  1. Jsonviewer2 for Notepad++ 64 bit
  2. Hacking JWT(JSON Web Token)
  3. 数据库期末复习(1-5章)
  4. Windows下遇到OSError: [WinError 6] 句柄无效的问题
  5. 苹果App Store公布最新应用审核标准:更加严格
  6. 如何从购物数据中挖掘出啤酒与尿布的关联关系?
  7. 配置Windows系统的IP地址为静态IP
  8. 本地安装brat标注平台
  9. 程序从源代码到可执行程序
  10. ctf:kali2:端口扫描:nmap和portscan