Python使用opencv实现图片定位第三种方式

# -*- 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)
  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
车牌定位是车牌识别的第一步,也是必要的一步。车牌定位的好坏直接决定了车牌识别的准确性。车牌定位的过程可以简单分为以下几个步骤:去除噪音、通过颜色特征或形状特征筛选、通过形态特征再筛选、选出最优的候选区域、画出矩形并返回矩形的对角顶点。\[1\] 在实现车牌定位的过程中,可以使用一些图像处理算法。例如,可以使用Sobel算子进行边缘检测,保留纵向纹理,然后进行颜色反向操作。接着可以使用Close操作进行横向闭运算,使用FindContours找到轮廓,再使用cvBoundingRect和cvRectangle对满足一定条件的轮廓进行矩形框选。\[2\] 在图像二值化时,边缘检测是必不可少的。虽然API提供了自适应二值化和Otsu二值化等方法,但这些方法考虑的是全图或者部分块,不适用于车牌图像。因此,我们需要自己构造阈值。个人建议使用适当的阈值来进行二值化,以保证图像清晰且不会影响到车牌轮廓的识别。\[3\] #### 引用[.reference_title] - *1* *3* [python-opencv实战:车牌识别(一):精度还不错的车牌定位](https://blog.csdn.net/qq_45804132/article/details/114150432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [(转) 学习OpenCV——车牌检测(定位)](https://blog.csdn.net/atupal/article/details/8174295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值