Opencv中关于特征点匹配定位的问题(二)单目标和多目标定位

article/2025/10/12 13:35:26

单目标和多目标定位

  • 单目标定位
  • 多目标定位

单目标定位

在opencv官方提供了一种定位的思路,就是通过匹配的点来获取透视变换矩阵,然后经过透视变换后就能够获得对应的目标的坐标了。

import cv2
import numpy as np# 打开两个文件
img1 = cv2.imread('321.png')
img2 = cv2.imread('3.png')# 灰度化
g1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
g2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)# 他建ORB特征检测器
orb = cv2.ORB_create()# 计算描述子与特征点
kp1, des1 = orb.detectAndCompute(g1, None)
kp2, des2 = orb.detectAndCompute(g2, None)# bf创建匹配器
bf = cv2.BFMatcher_create()# 对描述子进行匹配计算
matchs = bf.knnMatch(des1, des2, k=2)good = []
for i, (m, n) in enumerate(matchs):if m.distance < 0.1 * n.distance:good.append(m)if len(good) >= 4:srcPts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)dstPts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)# 查找单应性矩阵H, mask = cv2.findHomography(dstPts, srcPts, cv2.RANSAC,5)h, w = img2.shape[:2]pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)dst = cv2.perspectiveTransform(pts, H)cv2.polylines(img1, [np.int32(dst)], True, (0, 0, 255),4,16)
else:print('the number of good is less than 4.')exit()ret = cv2.drawMatchesKnn(img1, kp1, img2, kp2, [good], None)
cv2.imshow('result', ret)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述

但是,当目标不只一个时,并不能全部检测到。
在这里插入图片描述

多目标定位

但是可以通过上一章的方法,利用坐标点来直接定位到目标,而不通过透视变换进行定位。
代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt#读取图片
img=cv2.imread('./3123.png')
tem=cv2.imread('./3.png')
newimg=np.copy(img)
#创建特征点检测器
orb=cv2.ORB_create()
#创建BF特征点匹配器
bf=cv2.BFMatcher_create()#检测原图特征点
kp1,des1=orb.detectAndCompute(img,mask=None)
#检测模板图特征点
kp2,des2=orb.detectAndCompute(tem,mask=None)
#进行匹配
res=bf.knnMatch(des1,des2,k=2)good_res=[]
for m,n in res:if m.distance < 0.1 *n.distance:good_res.append(m)def get_rect(res,kp1,kp2):h,w=tem.shape[0:2]rect=[]for i in res:#获得坐标point1=cv2.KeyPoint_convert(kp1,keypointIndexes=[i.queryIdx])point2 = cv2.KeyPoint_convert(kp2, keypointIndexes=[i.trainIdx])point1=[int(np.ravel(point1)[0]),int(np.ravel(point1)[1])]point2 = [int(np.ravel(point2)[0]), int(np.ravel(point2)[1])]#获得目标框左上角的坐标minx = point1[0] - point2[0]miny = point1[1] - point2[1]#消除多余的目标框if [minx, miny, w, h] not in rect:rect.append([minx, miny, w, h])return rectrect=get_rect(good_res,kp1,kp2)#画出目标框
for i in range(len(rect)):cv2.rectangle(newimg,rect[i],[255,0,0],4,16)
#将最相近的10个点绘画出来
newimg=cv2.drawMatches(newimg,kp1,tem,kp2,good_res,None)
#绘制原图特征点
img=cv2.drawKeypoints(img,kp1,None,color=[0,0,255])
tem=cv2.drawKeypoints(tem,kp2,None,color=[0,255,0])cv2.imshow('frams',newimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下:
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/HTNysgwF.shtml

相关文章

目标定位和检测系列(1):一些基本概念

最近开始学习深度学习中的定位和检测任务。本来打算直接看论文&#xff0c;却发现文章中的的很多基本概念都搞不清楚&#xff0c;于是就自己先梳理了一些定位和检测任务的基本概念。&#xff08;内容主要来自斯坦福大学的CS231课程、吴恩达的deeplearning.ai卷积部分&#xff0…

OpenCV技巧篇——多目标视觉定位(以飞镖定位为例)

OpenCV技巧篇【1】——多目标视觉定位&#xff08;以飞镖定位为例&#xff09; 1、针对问题 多目标视觉定位是指通过计算机视觉技术对一张图片中的多个目标进行识别和定位的过程。本篇将以对飞镖定位为例&#xff0c;提出一个简单有效的多目标定位技巧&#xff0c;最终实现如…

目标定位算法(二)之基于测距的定位算法

文章目录 基于测距的定位算法1.最小二乘原理2.最小二乘定位算法3.基于RSSI测距的定位算法4.基于TOA/TDOA的目标定位算法1&#xff09;基于TOA测距2&#xff09;基于TDOA测距 基于测距的定位算法 非测距的定位算法往往误差较大&#xff0c;提高精度往往依赖于密集的观测站部署。…

YOLO v5与双目测距结合,实现目标的识别和定位测距

YOLO v5与双目测距结合&#xff0c;实现目标的识别和定位测距 1、首先安装YOLO v52、数据集的标定3、双目测距代码的单独运行调试4、YOLO v5与双目测距的代码的结合5、最终识别测距效果6、代码下载调试运行7、最终演示视频欢迎各位点赞投币收藏哦&#x1f923;&#x1f923;&am…

单目视觉的运动目标跟踪定位

[转] http://www.leiphone.com/news/201704/z87wjT8j9s94tMnG.html 市场上空间定位的技术方案分为单目、双目以及激光雷达三大阵营&#xff0c;其中激光雷达由于成本高昂市场接受度较低&#xff0c;而在都是基于计算机视觉的单目和双目中&#xff0c;双目则显得更受欢迎。在国内…

目标定位

声明&#xff1a;本文引用吴恩达教授的DeepLearning课程内容。 图像分类&#xff1a;图片分类问题并不陌生&#xff0c;例如&#xff0c;输入一张图片到多层卷积神经网络。这就是卷积神经网络&#xff0c;它会输出一个特征向量&#xff0c;并反馈给 softmax 单元来预测图片类型…

目标定位与检测

学习笔记仅用作自己复习 https://b23.tv/JAqvgA Object Recognition Object Detection Object Localization 位置表示&#xff0c;x,y中心点坐标&#xff0c;w宽度,h高度&#xff0c;就可以得到矩形框的范围。&#xff08;先找中心点再得到矩形框&#xff09; 黄色全连接层是…

定位目标地理位置

获取目标地理位置 一、GPS简介及分布二、定位工具&#xff1a;Seeker三、反向代理&#xff1a;Ngrok四、实战&#xff1a;获取目标地理位置1.运行 seeker2.上传 ngrok3.短链接伪装4.转发链接 一、GPS简介及分布 物理位置定位&#xff1a;根据P的定位不准确&#xff0c;容易被欺…

目标定位算法(四)之移动目标定位算法

文章目录 移动目标定位算法1.移动目标计算机仿真建模2.基于距离观测的运动目标定位3.纯方位角的运动目标定位 移动目标定位算法 实时探测目标并对目标进行实时定位。 1.移动目标计算机仿真建模 假定目标做匀速直线运动&#xff0c;第i个观测站的位置为(x,y)&#xff0c;目标…

目标定位跟踪系统概述

一、观测系统&#xff1a;目标、观测站、坐标系。 观测站如雷达、声纳等传感器。坐标系&#xff1a;二维、三维直角坐标系&#xff08;描述确定位置&#xff09;&#xff1b;极坐标系&#xff08;r,cita&#xff09;、球坐标系(r,cita,fai)&#xff08;利用角度描述位置&#x…

目标定位算法(三)之基于角度的定位算法

文章目录 基于角度测量的定位算法1.双战角度定位2.三角测量法定位 基于角度测量的定位算法 又叫纯方位目标定位&#xff0c;它的测量信息是目标与观测站之间的角度&#xff0c;包括方向角和俯仰角等。 1.双战角度定位 例&#xff1a;有两个观测站&#xff0c;其中A观测站的位…

目标检测之目标定位

目标检测是计算机视觉领域中一个新兴的应用方向&#xff0c;相比前两年&#xff0c;它的性能越来越好。在构建对象检测之前&#xff0c;我们先了解一下对象定位&#xff0c;首先我们看看它的定义。 图片分类任务我们已经熟悉了&#xff0c;就是算法遍历图片&#xff0c;判断其中…

深度学习——目标定位

目标定位 图片分类任务我们已经熟悉了&#xff0c;就是算法遍历图片&#xff0c;判断其中的对象是不是汽车&#xff0c;这就是图片分类。这节课我们要学习构建神经网络的另一个问题&#xff0c;即定位分类问题。这意味着&#xff0c;我们不仅要用算法判断图片中是不是一辆汽车&…

目标检测及目标定位

一、概述 本文是关于目标检测后根据物体的坐标来确定物体所处的区域&#xff0c;适用于需要根据物体在图像中的位置来分别判断的情况&#xff0c;而且对应的是YOLOv5模型。YOLOv5目标检测的内容可以看看我之前的一篇文章YOLOv5训练自己的数据集_ONEPIECE_00的博客-CSDN博客 本…

一、目标定位

1、目标定位是要求图像中只有一个目标&#xff0c;则构建这个目标的位置信息&#xff0c;如一个网络输出8个值&#xff0c;一个是是否有目标的pc&#xff0c;4个目标位置信息的bx,by,bh,bw&#xff0c;其中bx,by为目标中心点坐标&#xff0c;bh,bw为目标的高和宽&#xff0c;最…

3-1 目标定位

目标定位&#xff08; Object localization&#xff09; 图片分类任务就是算法遍历图片&#xff0c;判断其中的对象是不是某个指定的类别&#xff0c;这就是图片分类。 定位分类问题。意味着我们不仅要用算法判断图片中是不是一辆汽车&#xff0c;还要在图片中标记出它的位置&a…

深度学习(十五):目标定位 Object Localization

这是一系列深度学习的介绍&#xff0c;本文不会涉及公式推导&#xff0c;主要是一些算法思想的随笔记录。 适用人群&#xff1a;深度学习初学者&#xff0c;转AI的开发人员。 编程语言&#xff1a;Python 参考资料&#xff1a;吴恩达老师的深度学习系列视频 吴恩达老师深度学习…

第二十五节,初步认识目标定位、特征点检测、目标检测

一 目标定位(单个物体) 对象检测&#xff0c;它是计算机视觉领域中一个新兴的应用方向&#xff0c;相比前两年&#xff0c;它的性能越来越好。在构建对象检测之前&#xff0c;我们先了解一下对象定位&#xff0c;首先我们看看它的定义。 图片分类任务我们已经熟悉了&#xff0c…

目标定位和特征点检测

1. 目标定位 目标检测是计算机视觉领域中的一个新兴的应用方向&#xff0c;在构建目标检测之前&#xff0c;我们首先了解一下object localization目标定位。 前面说过的图片分类任务就是算法遍历图片&#xff0c;判断其中的对象是不是汽车&#xff0c;主要是图片分类 这里所…

目标定位(Object localization)

来源&#xff1a;Coursera吴恩达深度学习课程 在构建目标检测之前&#xff0c;建议先了解一下目标定位&#xff08;object localization&#xff09;。 在上图的这个例子中&#xff0c;图片分类&#xff08;image classification&#xff09;不仅要判断图片中是不是一辆汽车&a…