opencv3 特征检测与匹配及寻找目标

2023-05-16

1.算法:surf特征提取算法

SURF算法是著名的尺度不变特征检测器SIFT(Scale-Invariant Features Transform)的高效变种,它为每个检测到的特征定义了位置和尺度,其中尺度的值可用于定义围绕特征点的窗口大小,使得每个特征点都与众不同。这里便是使用SURF算法提取两幅图像中的特征点描述子,并调用OpenCV中的函数进行匹配,

2 代码

//特征检测与匹配
#include <iostream>
#include <stdio.h>
#include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/core/ocl.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/calib3d.hpp"
#include "opencv2/imgproc.hpp"
#include"opencv2/flann.hpp"
#include"opencv2/xfeatures2d.hpp"
#include"opencv2/ml.hpp"

using namespace cv;
using namespace std;
using namespace cv::xfeatures2d;
using namespace cv::ml;

int main()
{
     //对BGR空间的图像直接进行计算很费时间,所以,需要转换为灰度图  
    Mat a = imread("/home/daniel/catkin_ws/src/cvbridge/src/1.jpg", IMREAD_GRAYSCALE);    //读取灰度图像
    Mat b = imread("/home/daniel/catkin_ws/src/cvbridge/src/2.jpg", IMREAD_GRAYSCALE);

    Ptr<SURF> surf;      //创建方式和2中的不一样
    surf = SURF::create(800);
    //先对原图的描述子进行保留 
    BFMatcher matcher;
    Mat c, d;
    // 首先对两幅图像进行特征点的检测和描述子的计算 
    vector<KeyPoint>key1, key2;
    vector<DMatch> matches;

    surf->detectAndCompute(a, Mat(), key1, c);
    surf->detectAndCompute(b, Mat(), key2, d);

    matcher.match(c, d, matches);       //匹配

    sort(matches.begin(), matches.end());  //筛选匹配点


    vector< DMatch > good_matches;  //采集优秀的匹配点            
    int ptsPairs = std::min(50, (int)(matches.size() * 0.15));
    cout << ptsPairs << endl;
    for (int i = 0; i < ptsPairs; i++)
    {
        good_matches.push_back(matches[i]);
    }
    Mat outimg;
    drawMatches(a, key1, b, key2, good_matches, outimg, Scalar::all(-1), Scalar::all(-1),vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);  //绘制匹配点

    std::vector<Point2f> obj;
    std::vector<Point2f> scene;

    for (size_t i = 0; i < good_matches.size(); i++)
    {
        obj.push_back(key1[good_matches[i].queryIdx].pt);
        scene.push_back(key2[good_matches[i].trainIdx].pt);
    }

    std::vector<Point2f> obj_corners(4);
    obj_corners[0] = Point(0, 0);
    obj_corners[1] = Point(a.cols, 0);
    obj_corners[2] = Point(a.cols, a.rows);
    obj_corners[3] = Point(0, a.rows);
    std::vector<Point2f> scene_corners(4);

    Mat H = findHomography(obj, scene, RANSAC);      //寻找匹配的图像
    perspectiveTransform(obj_corners, scene_corners, H);

    line(outimg,scene_corners[0] + Point2f((float)a.cols, 0), scene_corners[1] + Point2f((float)a.cols, 0),Scalar(0, 255, 0), 2, LINE_AA);       //绘制
    line(outimg,scene_corners[1] + Point2f((float)a.cols, 0), scene_corners[2] + Point2f((float)a.cols, 0),Scalar(0, 255, 0), 2, LINE_AA);
    line(outimg,scene_corners[2] + Point2f((float)a.cols, 0), scene_corners[3] + Point2f((float)a.cols, 0),Scalar(0, 255, 0), 2, LINE_AA);
    line(outimg,scene_corners[3] + Point2f((float)a.cols, 0), scene_corners[0] + Point2f((float)a.cols, 0),Scalar(0, 255, 0), 2, LINE_AA);
   // if(!outimg.empty())
    imshow("aaaa",outimg);
    cvWaitKey(0);
}

3 错误集锦

这里写图片描述
这个错误折腾了好几天,一直还以为是opencv版本的问题,所以就一直各种卸载安装,最终解决办法:
我是在ubuntu下做的,就把catkin_ws工作空间下的devel和build文件夹删了,重新执行

catkin_make
rosrun cvbridge cvbridge

终于好了。。。
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv3 特征检测与匹配及寻找目标 的相关文章

  • I2C通信

    I2 C 芯片间 总线接口连接微控制器和串行 I 2 C 总线 它提供多主机功能 xff0c 控制所有 I 2 C 总线特定的 时序 协议 仲裁和定时 1 xff0c 物理层 1 IIC是一种两线串行的通信方式 xff0c SCL xff0
  • 使用Mybatis-Plus代码生成器的报错解决

    使用Mybatis Plus的同学 xff0c 在使用代码生成器的时候不知道有没有遇到过这个问题 xff1a 21 36 23 829 main DEBUG com baomidou mybatisplus generator AutoGe
  • Debian之安装完成后找不到命令解决办法

    1 修改配置文件 bashrc vim root bashrc export PATH 61 PATH usr sbin 2 使配置文件生效 source root bashrc
  • 相机标定、双目相机标定(原理)、三维重建效果展示

    1 相机标定的目的 xff1a xff08 1 xff09 通过单目相机标定分别求出左右相机的内参数和外参数 xff08 2 xff09 矫正由于镜头畸变造成的图片的变形 xff0c 例如 xff0c 现实中的直线 xff0c 拍摄成图像后
  • mac系统做openstack qcow2/raw镜像

    1 vmware安装出来虚拟机 xff08 操作系统不拆分 xff09 2 zhangjinyudeMacBook Pro Asianux vmwarevm zhangjinyu ls lh total 2820216 rw 1 zhang
  • 使用 Chrome 获取 Cookie 的数据

    Chrome 浏览器自带的开发功能相当强大 xff0c 这里只使用它的抓包功能 一 在浏览器中打开目标网站并登录 xff0c 进入目标页面 二 在 Chrome 浏览器下方的开发工具中单击 Network 标签页 按 F5 键 xff0c
  • 后台开发SQL技术总结

    一 字符串截取 1 substring str pos 用法 从字符串的第 4 个字符位置开始取 xff0c 直到结束 mysql gt select substring 39 example com 39 4 43 43 substrin
  • 论文记录:图像描述技术综述

    文章目录 前言 一 什么是image caption xff1f 二 基于深度学习的图像描述方法 1 基于编码器 解码器的方法 2 基于注意力机制的方法 3 基于生成对抗网络的方法 4 基于强化学习的方法 5 基于密集描述的方法 总结 前言
  • 一个接口有多个实现类

    如果一个接口有多个实现类 xff0c 在Controller层注入后调用 xff0c 怎么知道调用的是接口的哪个方法呢 xff1f 经过一番测试 和查找资料 终于找到了结果 2 0一个接口对应多个实现类 一个接口对应对个实现类 xff0c
  • c/c++使用libcurl库做http客户端及封装(HTTP_GET和HTTP_POST)

    由于项目需求需要发送http post去请求数据 xff0c 所以上网去寻找了一些发送http请求的方法 xff0c 发现libcurl较为常用 xff0c 然后根据官网上的例子 xff0c 对libcurl做了一些简单的封装 xff0c
  • (医学三维重建)MATLAB体绘制算法:多层面重建(MPR)

    xff08 医学三维重建 xff09 MATLAB体绘制算法 xff1a 多层面重建 xff08 MPR xff09 算法原理代码实现测试结果其他 by HPC ZY 算法原理 体绘制中比较特殊的一种 xff0c 因为它的输出是各种切面 就
  • Qt各个类之间继承关系

  • QGC -- 配置相机参数数据流说明(1)

    一 相关配置文件及对应画面 1 界面GeneralSettings qml 2 Video SettingsGroup json对应界面如下 xff1a span class token punctuation span span clas
  • ubuntu18.04 Intel Realsense T265与Realsense D435i 使用教程

    主要包括 xff1a realsense sdk驱动安装与ros包安装编译D435i与t256相机使用多个相机联合使用 官网链接 xff1a https github com IntelRealSense realsense roshttp
  • 2023年第八届团队程序设计天梯赛选拔校赛(三)题解

    文章目录 7 1 认识时钟7 2 修剪灌木7 3 求和运算7 4 合并数组7 5 骰子游戏7 6 字符串最大跨距7 7 上台阶7 8 A B7 9 括号匹配7 10 列出连通集7 12 哲哲打游戏7 13 喊山 标号标题分数提交通过率7 1
  • 学习挖掘机和程序员哪个好

    guanghuacheng guanghuacheng 等 级 xff1a 结帖率 xff1a 0 00 楼主发表于 xff1a 2011 04 14 16 57 13 快要高考了 学习成绩一般 不想上了 家里让去学挖掘机 我不想去 要想培
  • 我的2014作的一手好死,2015求轻虐

    真的好想上来开头就写 新的一年 xff0c 全新的自己 xff0c 但是这样自欺欺人的话我还是别说了 xff0c 省得一大批损友又来吐嘈我 2015年希望找到自己的另一半这样的话我也不想再提了 xff0c 因为这样写了两年 依旧单身 xff
  • 织梦后台登陆不上提示验证码不正确

    1 密码明明正确的 xff0c 却无法登陆后台管理 解答 xff1a 此外 xff0c 不管是新人 xff0c 还是phper xff0c 都要注意的是 xff1a 用户名和密码只能由 a z A Z 64 这些字符组成 xff0c 不能是
  • 浅谈视觉与语言中的多模态研究,究竟都研究什么

    前言 随着人工智能的整体进步 xff0c 计算机视觉和自然语言处理已经有了巨大的 有了如此强大的算法和自主系统的综合能力 xff0c 就需要合并知识领域 xff0c 实现跨模态兼容 xff0c 视觉语言 VisLang 研究具有更复杂的任务
  • 复选框单选框与文字对齐问题的研究与解决

    原文地址 xff1a http www zhangxinxu com wordpress p 61 56 前言 目前中文网站上面的文字 xff0c 就我的个人感觉而言 xff0c 绝大多数网站的主流文字大小为12px xff0c 因为在目前

随机推荐

  • 我的2014作的一手好死,2015求轻虐

    真的好想上来开头就写 新的一年 xff0c 全新的自己 xff0c 但是这样自欺欺人的话我还是别说了 xff0c 省得一大批损友又来吐嘈我 2015年希望找到自己的另一半这样的话我也不想再提了 xff0c 因为这样写了两年 依旧单身 xff
  • iOS系统及微信中不支持audio自动播放问题

    span class hljs tag lt span class hljs title script span span class hljs attribute src span 61 span class hljs value 34
  • 模拟复选框

    span class hljs doctype lt DOCTYPE html gt span span class hljs tag lt span class hljs title html span gt span span clas
  • 验证码刷新

    lt label span class hljs keyword class span 61 span class hljs string 34 focusa 34 span gt 看不清 xff1f lt a href 61 span c
  • 如何从数据库调出数据显示到页面PHP+Mysql+Html(简单实例)

    首先显示一下数据库的数据 页面信息 lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 Transitional EN 34 34 http www w3 org TR xhtml1 DTD xhtml1
  • PHP+MYSQL+HTML 学生成绩查询

    首先创建一个数据库名为 xscj xff0c 表信息如下 xff1a 页面信息为 xff1a lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 Transitional EN 34 34 http ww
  • php试题与答案(一)

    1 xff0e mysql connect 与 64 mysql connect 的区别是 B A 64 mysql connect 不会忽略错误 将错误显示到客户端 B mysql connect 不会忽略错误 将错误显示到客户端 C 没
  • php试题与答案(二)

    37 xff0e 在str replace 1 2 3 函数中1 2 3 所代表的名称是 B A 34 取代字符串 xff02 xff0c xff02 被取代字符串 xff02 xff0c xff02 来源字符串 xff02 B xff02
  • PHP实现上一页下一页翻页代码实例

    lt php 1 xff0c 将数据库的所有记录查询出来 xff0c 然后再一页一页的显示 link 61 mysql connect 39 localhost 39 39 root 39 39 123 39 mysql select db
  • 论文笔记:Dual-Level Collaborative Transformer for Image Captioning

    前言 论文详情可以参照这篇 xff0c 写得很好 本小白这篇内容主要是对论文中的一些思想和图以及部分公式进行自己的解读 如有错误 xff0c 请多多谅解 论文思想 首先 xff0c 根据论文第一作者在知乎所说 xff08 搜这篇论文名称可以
  • win10环境下基于OpenVINO部署yolov5模型

    以在Intel的OpenVINO上部署Yolov5模型为例 xff0c 加深对模型部署的理解 1 训练准备 获取yolov5模型及数据集 git clone git github com ultralytics yolov5 pt模型 co
  • docker常用命令集锦

    登录服务器 ssh v 64 192 sudo权限 su 查看docker版本 docker version 查看内核版本 uname a 启动docker docker ps a docker start container名 docke
  • git详细使用

    git搭建 amp 更新远程仓库 配置用户 span class token function git span config global user name span class token string 34 John Doe 34
  • Mindspore安装

    本文用于记录搭建昇思MindSpore开发及使用环境的过程 xff0c 并通过MindSpore的API快速实现了一个简单的深度学习模型 什么是MindSpore 昇思MindSpore是一个全场景深度学习框架 xff0c 旨在实现易开发
  • 机械臂的运动控制

    前言 xff1a 近年来 xff0c 随着服务机器人的兴起 xff0c 机械臂也正走进我们的日常生活 xff0c 近年来出现了一些低成本的 小型的 桌面版 的机械臂的产品 xff0c 相信这将是服务机器人的一个重要方向 xff01 机械臂由
  • Gazebo仿真

    在ROS中有3个可以模拟机器人的模拟器软件 xff1a Gazebo Stage ArbotiX 就是RVIz 你可以任选一个 xff1a Gazebo是一个仿真环境 xff08 平台 xff09 xff0c 可以进行三维机器人动力学仿真等
  • [小插曲]VC学习——基于MFC的模拟时钟程序

    一 程序窗口设计步骤 xff08 1 xff09 用AppWizard生成一个名为Clock的单文档 xff08 SDI xff09 程序框架 为了简化应用程序 xff0c 在第四步时去掉Docking toolbar和Initial st
  • gazebo官网例程

    首先官网下载代码https github com ros simulation gazebo ros demos 1 创建编译工作空间 cd catkin ws src git clone https github com ros simu
  • ROS action

    Actionlib是ROS非常重要的库 xff0c 像执行各种运动的动作 xff0c 例如控制手臂去抓取一个杯子 xff0c 这个过程可能复杂而漫长 xff0c 执行过程中还可能强制中断或反馈信息 xff0c 这时Actionlib就能大展
  • opencv3 特征检测与匹配及寻找目标

    1 算法 xff1a surf特征提取算法 SURF算法是著名的尺度不变特征检测器SIFT Scale Invariant Features Transform 的高效变种 xff0c 它为每个检测到的特征定义了位置和尺度 xff0c 其中