OpenCV教程(45) harris角的检测(3)

      在前面一篇教程中,我们通过取局部最大值的方法来处理检测结果,但是从图像中可以看到harris角的分布并不均匀,在纹理颜色比较深的地方检测的harris角结果更密集一些。本章中,我们使用一个简单的策略算法,首先在检测的harris角图像中,找到一个值最大的角,后面的最大值角检测至少要和前面的角有一个距离,这样循环查找角,直到得到指定数目的角位置。

     在OpenCV中,我们可以通过下面的代码得到结果:

// Compute good features to track
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(image,corners,
    500,    // maximum number of corners to be returned
    0.01,    // quality level
    10);    // minimum allowed distance between points

      500是我们需要的harris角数目,0.01是quality level,用作二值化harris角图像,10是两个harris之间的距离。检测结果放在corners中,我们可以在原图像中,显示这些角,可以看到这些角的分布要均匀很多。

    注意,这个方法默认使用Shi and C方法判断定角。Good Features to Track,1994, J. Shi and C。

    在harris角检测中,我们判断R值的大小,,但在Shi and C的角检测算法中,我们使用公式,R小于某个阈值,才会判断给区域存在角。当然在cv::goodFeaturesToTrack中,你也可以指定使用harris方法判定角。

我们也可以使用下面的代码得到相同的结果:

// vector of keypoints
std::vector<cv::KeyPoint> keypoints;
// Construction of the Good Feature to Track detector
cv::GoodFeaturesToTrackDetector gftt(
    500,   // maximum number of corners to be returned
    0.01,   // quality level
    10);    // minimum allowed distance between points
// point detection using FeatureDetector method
gftt.detect(image,keypoints);

cv::drawKeypoints(image,        // original image
    keypoints,                    // vector of keypoints
    image,                        // the resulting image
    cv::Scalar(255,255,255),    // color of the points
    cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); //drawing flag

程序代码:参考FirstOpenCV49

代码下载:http://yunpan.cn/Q4akuTWgAUqqu

时间: 2024-10-02 07:38:43

OpenCV教程(45) harris角的检测(3)的相关文章

OpenCV教程(43) harris角的检测(1)

      计算机视觉中,我们经常要匹配两幅图像.匹配的的方式就是通过比较两幅图像中的公共特征,比如边,角,以及图像块(blob)等,来对两幅图像进行匹配.      相对于边,角更适合描述图像特征,比如下面的图像中,大概有6种特征,我们用A.B.C.D.E.F来描述,其中A, B是平的区域,在图像中很难精确定位,C,D是边,比A,B好些,但是图像中的边也很多,定位到某个边也比较困难,相比来说E,F的角更适合描述当前的图像的特征,也更好检测,因为你不论怎么移动图像,这些角的特征都和图像其它部分不

opencv笔记6:角点检测

time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇学习笔记是各种模板操作,是图像增强技术. 那么我节写来应该继续找下有没有别的图像增强技术. 但是,我对增强还不是特别理解.图像增强:划定ROI区域,然后想方设法将感兴趣的特征有选择的突出.注意,这可是不去考虑图像质量下降的原因的.图像恢复:针对图像降质的原因,设法去补偿降质因素,从而使改善后的图像尽

OpenCV教程(47) sift特征和surf特征

     在前面三篇教程中的几种角检测方法,比如harris角检测,都是旋转无关的,即使我们转动图像,依然能检测出角的位置,但是图像缩放后,harris角检测可能会失效,比如下面的图像,图像放大之前可以检测出为harris角,但是图像放大后,则变成了边,不能检测出角了.所以,harris角是缩放相关的.      在paper Distinctive Image Features from Scale-Invariant Keypoints中,D.Lowe提出了SIFT算法,该算法是缩 放无关的

Harris角点学习

    人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点.这些点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能.其在三维场景重建.运动估计.目标跟踪.目标识别.图像配准与匹配等计算机视觉领域起着非常重要的作用.    角点的检测主要有两类基于图像边缘的方法和基于图像灰度的方法.前者很大程度上依赖于图像的分割和边缘提取,一旦待检测目标发生局部变化,很可能导致操作失败,因此该类方

车辆分割中角点分割-opencv车辆分割中角点选择并连线分割方法和代码

问题描述 opencv车辆分割中角点选择并连线分割方法和代码 就是已经得到了重合车辆的很多角点,现在需要选择真正的角点来连线进行分割,不知道怎么写代码. 解决方案 你这个车辆有重合,应该怎么检测效果好一些,我就不太清楚了, 不知道能不能参考矩形检测的方法:矩形检测http://blog.csdn.net/wangyaninglm/article/details/43959947 解决方案二: 试用动态分析,使用重合前各车的图片,去识别重合后车辆.

Harris角点标注法

在图像拼接过程中,图像的匹配是重要的一步,其中最常用的算法是Harris角点标注算法. 在Harris之前常用的是Moravec 角点提取算法,Moravec角点检测是一种基于灰度值的检测算法,主要是通过滑动二值矩形窗口寻找灰度变化的局部最大值.主要先通过事先设定一个经验阈值,通过对窗口(如取3*3的窗口)进行相邻八个方向(上,下,左,右,左上,左下,右上,右下)进行滑动,计算原窗口和滑动后窗口的灰度变化值的平方和,取这8个方向的差平方和的最小值与事先设定的阈值进行比较,如果大与事先的阈值就将该

PHP开发框架Yii Framework教程(45) Zii组件-Selectable示例

CJuiSelectable可以显示一个列表,列表的每个项支持Select事件,它封装了 JUI Selectable插件,其基本用法如下: <?php Yii::app()->clientScript->registerCss('selectable'," #selectable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #selectable li {margin: 2px; padding: 4

在opencv中利用findContours进行轮廓检测,程序运行结束时为什么会报中断错误,求解?

问题描述 在opencv中利用findContours进行轮廓检测,程序运行结束时为什么会报中断错误,求解? 代码如下: #include #include #include #include #include #include using namespace cv; using namespace std; //一.将源图片转成单通道的灰阶图片 Mat changeSourceImg(Mat img){ Mat great(img.size(), CV_8U); cvtColor(img, g

harris角点相应值的计算方法

问题描述 harris角点相应值的计算方法 请问,角点相应值是个什么量?用来说明什么指标? harris角点相应值应该怎么算?