打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
2. Shi-Tomasi 角点检测

from http://blog.sina.com.cn/s/blog_96b836170102w1ki.html

本博文原理部分简述,重点在编程实现(程序参考并修改了网上资料,网上程序不一定能运行,但本文程序亲测能跑)

Shi-Tomasi 算法是Harris算法的改进。Harris算法最原始的定义是将矩阵M 的行列式值与M 的迹相减,再将差值同预先给定的阈值进行比较。后来ShiTomasi提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点。

//ShiTomas

#include "stdafx.h"

#include

#include

#include

#include "opencv2/opencv.hpp"

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/features2d/features2d.hpp" 

#include

#include

#include

#include

 

using namespace cv;

using namespace std;

 

/// 全局变量

Mat src,srcGray;

int maxCorners=23;       //角点个数的最大值

int maxCornersThresh= 1000; //角点个数最大值的上限(滑动条范围0-1000

 

RNG rng(12345);

char*sourceWindow = "src";

 

/// 角点检测函数声明

void doGoodFeaturesToTrack(int,void*);

 

int main(intargc,char**argv)

{

        /// 载入图像并灰度化

        src = imread("C:\\Users\\Administrator\\Desktop\\qi.jpg",1);

        cvtColor(src, srcGray, CV_BGR2GRAY);

 

        /// 创建显示窗口以及滑动条

        //namedWindow(sourceWindow, CV_WINDOW_AUTOSIZE);

        //createTrackbar("maxnum:",sourceWindow, &maxCorners, maxCornersThresh,doGoodFeaturesToTrack);

        imshow(sourceWindow, src);

 

        doGoodFeaturesToTrack(0, 0);

 

        waitKey(0);

        return(0);

}

 

/// 角点检测函数实现:标示出每个角点位置

void doGoodFeaturesToTrack(int,void*)

{

        if(maxCorners< 1)

                  maxCorners = 1;

 

        /// Shi-Tomasi的参数设置

        vector<</span>Point2f>corners;

        doublequalityLevel= 0.01;

        doubleminDistance= 10;

        intblockSize= 3;

        booluseHarrisDetector= false        //不使用Harris检测算法

        doublek= 0.04;

 

        /// 深度拷贝原图像用于绘制角点

        MatsrcCopy= src.clone();

        /// 应用角点检测算法

        goodFeaturesToTrack(srcGray,

                  corners,

                  maxCorners,

                  qualityLevel,

                  minDistance,

                  Mat(),      //未选择感兴趣区域

                  blockSize,

                  useHarrisDetector,

                  k);

 

        /// maxCorners的值较小时,以下两个值基本是一样的;

        /// maxCorners的值较大时,实际检测到的角点数目有可能小于maxCorners,以下两个值不一样。

        cout << "*  detected corners : " <<corners.size() << endl;

        cout << "** max corners: " <<maxCorners << endl;

 

        /// 绘制出角点

        intr= 4;

        for(inti= 0; i < corners.size(); i++)

                  circle(srcCopy, corners[i], r, Scalar(0,255, 0), -1, 8, 0);

 

        /// 显示结果

        namedWindow(sourceWindow, CV_WINDOW_AUTOSIZE);

        imshow(sourceWindow, srcCopy);

}


效果图:



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
结合小波变换的Shi
新疆维吾尔族手工地毯图案矢量化技术研究
双目视觉测量中点特征提取及匹配算法评估
SHI记:何处解急?
SHI
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服