目的:提取图片中某个矩形的四个角点的坐标

方法:采用非极大值抑制的fast特征点检测

流程:

  1. 图像滤波(可选)
  2. fast角点检测
  3. 自己设定矩形大致范围
  4. 输出矩形角点坐标

程序:

主函数文件

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
//局部极大值抑制,这里利用fast特征点的响应值做比较
void selectMax(int window, cv::Mat gray, std::vector<KeyPoint> & kp){//window是局部极大值抑制的窗口大小,r为半径int r = window / 2;if (window != 0){//对kp中的点进行局部极大值筛选for (int i = 0; i < kp.size(); i++){for (int j = i + 1; j < kp.size(); j++){//如果两个点的距离小于半径r,则删除其中响应值较小的点if (abs(kp[i].pt.x - kp[j].pt.x) + abs(kp[i].pt.y - kp[j].pt.y) <= 2 * r){if (kp[i].response < kp[j].response){std::vector<KeyPoint>::iterator it = kp.begin() + i;kp.erase(it);selectMax(window, gray, kp);}else{std::vector<KeyPoint>::iterator it = kp.begin() + j;kp.erase(it);selectMax(window, gray, kp);}}}}}}//
void fastpoint(cv::Mat gray, int threshold, int window, int pointNum, std::vector<KeyPoint> & kp){std::vector<KeyPoint> keypoint;// cv::FastFeatureDetector fast(threshold, 1);  //threshold 为阈值,越大,特征点越少//  fast.detect(gray, keypoint);  //fast特征检测Ptr<FeatureDetector> fast = FastFeatureDetector::create(threshold);
fast->detect(gray, keypoint);if (keypoint.size() > pointNum){threshold = threshold + 5;fastpoint(gray, threshold, window, pointNum, keypoint);}selectMax(window, gray, keypoint);kp.assign(keypoint.begin(), keypoint.end());    //复制可以point到kp}int main(){cv::Mat img = cv::imread("/home/csdn/123.jpeg");cv::Mat gray;//medianBlur(img,img, 5); //中值滤波GaussianBlur(img, img, Size(5, 5), 0.8); //高斯滤波cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);std::vector<KeyPoint> kp;int threshold = 20;  //fast阈值int window1 = 7;  //局部非极大值抑制窗口int pointMaxNum1 = 500; //特征点最大个数fastpoint(gray, threshold, window1, pointMaxNum1, kp);//矩形框int x1 ;int x2 ;int y1 ;int y2;//自己设置多大的矩形框x1=250 ;x2=259 ;y1=247 ;y2=260;vector<KeyPoint> temp;for(vector<KeyPoint>::iterator it = kp.begin();it<kp.end();it++){if(it->pt.x < x2 && it->pt.x > x1 &&it->pt.y < y2 && it->pt.y > y1){cout <<"角点坐标"<<endl;cout <<it->pt<<endl;}}
/** 可以自己调整fastpoint参数,一次多画几张图片,对比不同参数的提取效果怎么样cv::Mat img2, gray2;std::vector<KeyPoint> kp2;img.copyTo(img2);gray.copyTo(gray2);int window2 = 15;  //局部非极大值抑制窗口int pointMaxNum2 = 600; //特征点最大个数fastpoint(gray2, threshold, window2, pointMaxNum2, kp2);
*/cv::drawKeypoints(img, kp, img, Scalar(0, 0, 255));cv::rectangle(img,Rect(x1,y1,x2-x1,y2-y1),(0, 0, 255),2);cv::imwrite("/home/csdn/123_1.jpeg", img);    //保存结果图片cv::namedWindow("img", cv::WINDOW_NORMAL);cv::imshow("img", img);    //展示结果图片cv::waitKey(0);system("pause");return 0;
}

我使用cmake编译

CMakeLists.txt


cmake_minimum_required(VERSION 2.8)
project(vo1)set(CMAKE_BUILD_TYPE "Release")
add_definitions("-DENABLE_SSE")
set(CMAKE_CXX_FLAGS "-std=c++14 ${SSE_FLAGS} -msse4")
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set(OpenCV_DIR /usr/lib/x86_64-linux-gnu/cmake/opencv4) //我的opencv库的位置
find_package(OpenCV  REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS}
)add_executable(fast1 fast1.cpp)
target_link_libraries(fast1${OpenCV_LIBS}fmt) 

网络图片涉及版权在此不做演示

代码仅供参考,欢迎学习交流

参考FAST角点检测算法(二)- 非极大值抑制筛选fast特征点_AI人工智能科学的博客-CSDN博客_角点检测非极大值抑制https://aibotlab.blog.csdn.net/article/details/73397682

C++OpenCV矩形的角点检测与坐标提取,基于fast特征点相关推荐

  1. OpenCV学习-P44 角点检测

    OpenCV学习-P44 角点检测 角点特征 Harris和Shi-Tomas算法 Harris角点检测 Shi-tomas角点检测 角点特征 角点是图像很重要的特征,对图像图形的理解和分析有很重要的 ...

  2. **角点检测(Harris)基于Opencv2.4.9版本+VS2012开发平台进行编**

    角点检测(Harris)基于Opencv2.4.9版本+VS2012开发平台进行编 角点检测 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检 ...

  3. Shi-tomasi角点检测python实现及基于opencv实现 (角点检测、非极大值抑制)

    写在前面: 已经是七月中旬,黄宁然,你依然在这里. 参考文献镇楼: [1]龚思宇宙,基于平面模板的摄像机标定及相关技术研究 [2]汪洋,扫地机器人定位算法设计与嵌入式系统实现 [3]Denny#,[o ...

  4. 毛星云opencv之SHi-Tomasi角点检测综合程序

    #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...

  5. Harris角点检测python实现及基于opencv实现

    写在前面: 黄宁然, 七月,骄阳似火. 参考文献镇楼: [1]袁志聪,基于harris特征的点云配准方法研究 [2]高亭,基于改进Harris角点检测的印刷体文档图像检索技术 [3]景庆阳,基于har ...

  6. OpenCV(25)轮廓检测(轮廓提取、属性、近似轮廓、外接矩形和外接圆)

    目录 一.轮廓检测基础理论 1.轮廓概述 2.API介绍 1.cv.findContours函数(查找轮廓) 2.cv.drawContours函数(画出轮廓) 检测轮廓并画出:(用二值图检测轮廓) ...

  7. OpenCV亚像素角点检测

    前言 我在做围棋盘的的四个角点检测时,试了几种角点检测,用来得到棋盘四个角的初始点,试了几种角点检测的方法,但在我所使用的环境下,亚像素的角点检测得到的结果比较理想. 代码 //亚像素角点检测 voi ...

  8. opencv 边缘检测,角点检测

    #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <ope ...

  9. opencv c++ Harris角点检测、shi-tomasi角点

    应用:连续的图像移动或图像拼接场景中,确定图像中某一对象的位置. 1.角点检测原理 1.1.角点定义 在x方向和y方向都有最大梯度变化的像素点,衡量这个变化的计算式如下,为xx,xy,yx,yy四个方 ...

最新文章

  1. jQuery - 当当网我的订单页
  2. 纯css写单选框和复选框的样式和功能
  3. [moka同学笔记转载]Yii 设置 flash消息 创建一个渐隐形式的消息框
  4. 算法笔记1-最大子序列和问题的求解
  5. java 工作3年水平_有着4年java工作经验,应该达到什么样的水平?
  6. 采购申请不固定供应商怎么破?
  7. ssm框架搭建和整合流程
  8. python 登录接口_使用python编写一个登录接口
  9. 数据集蒸馏 by Matching Training Trajectories
  10. xwork-2.1.2.jar与xwork-core-2.1.6.jar的区别是什么? 在线等待 先谢谢了
  11. 如何格式化电脑_电脑硬盘不小心格式化如何恢复【恢复方法】
  12. Pycharm设置中文版
  13. 完成端口学习笔记(一):完成端口+控制台 实现文件拷贝
  14. 计算机专业高级职称评定条件,计算机高级工程师职称评定条件
  15. windows adb usb 找不到设备的解决方法
  16. 简单概括 文明进化的各个阶段 (39)
  17. 在Linux命令行上计划自己的假期日历
  18. 软件界面交互式设计注意事项
  19. python进行邮件发送以及django中利用邮件注册激活功能
  20. 现在有哪些好的国外的云服务器网站(国内可以直接上的那种)?

热门文章

  1. java求两个非零正整数的最大公约数和最小公倍数
  2. Excel成神之道-001-数据分列
  3. PicGo+Gitee(码云)搭建个人博客的免费图床
  4. 实用化工计算机模拟-matlab在化学工程中的应用的光盘程序_这150款化工常用软件,你会用多少?...
  5. iOS开发常用之博客
  6. 订单拆单,电商开发时 经常遇到的问题
  7. 年薪五万程序员的生活及他的理财梦
  8. 直角坐标系转球坐标系 Equirectangular 理解 代码 Unity
  9. Linux软件开发工程师
  10. air什么意思中文_air这个英文中文意思是什么?