Harris角点检测
代码示例一:
#include<opencv2/opencv.hpp> using namespace cv; int main(){ Mat src = imread(); imshow("原始图", src); //进行Harris角点检测找出角点 Mat cornerStrength; cornerHarris(src, cornerStrength, , , 0.01); //对灰度图进行阈值操作,得到二值图并显示 Mat harrisCorner; threshold(cornerStrength, harrisCorner, , THRESH_BINARY); imshow("二值效果图",harrisCorner); waitKey(); ; }
效果:
代码示例二:
#include<opencv2/opencv.hpp> using namespace cv; #define WINDOW_NAME1 "窗口1" #define WINDOW_NAME2 "窗口2" Mat src,srcClone,gray; ; ; //函数声明 void onCornerHarris(int, void*);//回调函数 int main(){ src = imread(); imshow("原始图", src); srcClone = src.clone(); cvtColor(srcClone, gray, COLOR_BGR2GRAY); //创建窗口和滚动条 namedWindow(WINDOW_NAME1, WINDOW_AUTOSIZE); createTrackbar("阈值:", WINDOW_NAME1, &thresh, max_thresh, onCornerHarris); //调用一次回调函数进行初始化 onCornerHarris(, ); waitKey(); ; } void onCornerHarris(int, void*){ Mat dstImage;//目标图 Mat normImage;//归一化后的图 Mat scaledImage;//线性变换后的8位无符号整形图 //初始化 dstImage = Mat::zeros(src.size(), CV_32FC1); srcClone = src.clone(); //进行角点检测 cornerHarris(gray, dstImage, , , 0.04, BORDER_DEFAULT); //归一化与转换 normalize(dstImage, normImage, , , NORM_MINMAX, CV_32FC1, Mat()); convertScaleAbs(normImage, scaledImage); //绘制:将检测到的,符合阈值条件的角点绘制出来 ; j < normImage.rows; j++){ ; i < normImage.cols; i++){ ){ circle(srcClone, Point(i, j), , Scalar(, , ), , , ); circle(scaledImage, Point(i, j), , Scalar(, , ), , , ); } } } imshow(WINDOW_NAME1, srcClone); imshow(WINDOW_NAME2, scaledImage); }
效果:
代码示例三:
#include<opencv2/opencv.hpp> using namespace cv; #include<vector> using namespace std; class HarrisDetector{ private: //表示角点强度的32位浮点图像 Mat cornerStrength; //阈值化后的32位浮点图像 Mat cornerTh; //局部极大值图像(内部) Mat localMax; //导数平滑的相邻像素的尺寸 int neighbourhood; //梯度计算的孔径大小 int aperture; //Harris参数 double k; //harris计算的最大强度 double maxStrength; //计算得到的阈值(内部) double threshold; //非极大值抑制的相邻像素的尺寸 int nonMaxSize; //非极大值抑制的核 Mat kernel; public: HarrisDetector() :neighbourhood(), aperture(), k(0.01), maxStrength(0.0), threshold(){ //创建非极大值抑制的核 } void detect(const Mat& image){ //harris计算 cornerHarris(image, cornerStrength, neighbourhood, aperture, k); //内部阈值计算 double minStrength;//未使用 minMaxLoc(cornerStrength, &minStrength, &maxStrength); //局部极大值检测 Mat dilated;//临时图像 dilate(cornerStrength, dilated, Mat()); compare(cornerStrength, dilated, localMax, CMP_EQ); } Mat getCornerMap(double qualityLevel){ Mat cornerMap; //对角点图像进行阈值化 this->threshold = qualityLevel*maxStrength; cv::threshold(cornerStrength, cornerTh, threshold, , THRESH_BINARY); //转换为8位图像 cornerTh.convertTo(cornerMap,CV_8U); //非极大值抑制 bitwise_and(cornerMap, localMax, cornerMap); return cornerMap; } void getCorners(vector<cv::Point>& points,double qualityLevel){ //得到角点图 cv::Mat cornerMap = getCornerMap(qualityLevel); getCorners(points, cornerMap); } void getCorners(vector<cv::Point>& points, const Mat& cornerMap){ //遍历像素得到所有特征 ; y < cornerMap.rows; y++){ const uchar* rowPtr = cornerMap.ptr <uchar>(y); ; x < cornerMap.cols; x++){ //如果是特征点 if (rowPtr[x]){ points.push_back(cv::Point(x, y)); } } } } //在特征点的位置绘制圆 ,,), , ){ vector<cv::Point>::const_iterator it = points.begin(); while (it != points.end()){ cv::circle(image, *it, radius, color, thickness); ++it; } } }; int main(){ Mat src = imread(); //HarrisDetector类使用方式 HarrisDetector harris; harris.detect(src); std::vector<cv::Point> pts; harris.getCorners(pts, 0.1); harris.drawOnImage(src, pts); imshow("result", src); waitKey(); }
效果:
Harris角点检测的更多相关文章
- Harris角点检测算法优化
Harris角点检测算法优化 一.综述 用 Harris 算法进行检测,有三点不足:(1 )该算法不具有尺度不变性:(2 )该算法提取的角点是像素级的:(3 )该算法检测时间不是很令人满意. 基于以上 ...
- Harris 角点检测
一 .Motivation 对于做图像处理的人来说,Harris角点检测肯定听过,1988年发表的文章"A combined corner and edge detector"描述 ...
- Harris角点检测算原理
主要参考了:http://blog.csdn.net/yudingjun0611/article/details/7991601 Harris角点检测算子 本文将该文拷贝了过来,并做了一些数学方面的 ...
- Harris角点检测原理分析
看到一篇从数学意义上讲解Harris角点检测很透彻的文章,转载自:http://blog.csdn.net/newthinker_wei/article/details/45603583 主要参考了: ...
- cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014. ...
- Opencv学习笔记------Harris角点检测
image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...
- harris角点检测的简要总结
目录 1. 概述相关 2. 原理详解 1) 算法思想 2) 数学模型 3) 优化推导 3. 具体实现 1) 详细步骤 2) 最终实现 4. 参考文献 1. 概述相关 harris角点检测是一种特征提取 ...
- OpenCV-Python:Harris角点检测与Shi-Tomasi角点检测
一.Harris角点检测 原理: 角点特性:向任何方向移动变换都很大. Chris_Harris 和 Mike_Stephens 早在 1988 年的文章<A CombinedCorner an ...
- 第十一节、Harris角点检测原理(附源码)
OpenCV可以检测图像的主要特征,然后提取这些特征.使其成为图像描述符,这类似于人的眼睛和大脑.这些图像特征可作为图像搜索的数据库.此外,人们可以利用这些关键点将图像拼接起来,组成一个更大的图像,比 ...
随机推荐
- 基于Open vSwitch搭建虚拟路由器
As part of my work in OpenDaylight, we are looking at creating a router using Open vSwitch... Why? W ...
- Windows性能查看器:系统的性能信息(I/O,IIS最大连接数,Sql) ,以及解决 asp.net IIS 一二百多用户并发
在测试过程中,我们经常需要知道“系统的资源利用情况”来监测我们的测试执行情况,来查看测试环境是否有效,测试结果是否可信,或者是在无人值守时保存结果,等我们值班时再来分析. 1.在Windows环境下, ...
- WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)
[DataMember] public DateTime? myTime { get; set; } var timeFormat = new JsonSerializerSettings() { D ...
- yii2安装
https://github.com/settings/tokens 设置token 在安装的时候 要复制进去 复制到安装命令中去
- ERROR 1130 (HY000):Host'localhost'解决方法
http://www.2cto.com/database/201211/169504.html ERROR 1130 (HY000):Host'localhost'解决方法 ERROR 1130 ...
- java中向JTextArea中添加滚动条(垂直的和水平的)
这次在研究java的swing类时,在做一个实例时,发现了JTextArea中添加滚动条的问题,经过网上查找资料和自己测试发现有以下用法: 1.首先应该把JTextArea添加到一个JScrollPa ...
- java readLine()
原文 虽然写IO方面的程序不多,但BufferedReader/BufferedInputStream倒是用过好几次的,原因是: 它有一个很特别的方法:readLine(),使用起来特别方便,每次读回 ...
- [HTML] CSS3 边框
CSS3 边框 用CSS3,你可以创建圆角边框,添加阴影框,并作为边界的形象而不使用设计程序,如Photoshop. 在本章中,您将了解以下的边框属性: border-radius box-shado ...
- [CF225C] Barcode (简单DAG上dp)
题目链接:http://codeforces.com/problemset/problem/225/C 题目大意:给你一个矩阵,矩阵中只有#和.两种符号.现在我们希望能够得到一个新的矩阵,新的矩阵满足 ...
- php路径目录解析函数dirname basename pathinfo区别及实例
php获取路径.目录或文件名称,我们经常会使用到dirname().basename().pathinfo()这三个函数,本文章向大家详细介绍这三个函数的区别以及使用实例,需要的朋友可以参考一下. d ...