您的位置:首页 > 运维架构

OpenCv学习笔记(八):角点检测

2012-06-22 22:43 323 查看
角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。角点对于图像当中目标的跟踪,图像检索,图像匹配都有着至关重要的指导作用。下面一小段代码是用到触点检测的主要用到opencv当中的goodFeaturesToTrack函数

#include "stdafx.h"

/**

* @function goodFeaturesToTrack_Demo.cpp

* @brief Demo code for detecting corners using Shi-Tomasi method

* @author OpenCV team

*/

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace cv;

using namespace std;

/// Global variables

Mat src, src_gray;

int maxCorners = 23;

int maxTrackbar = 100;

RNG rng(12345);

char* source_window = "Image";

/// Function header

void goodFeaturesToTrack_Demo( int, void* );

/**

* @function main

*/

int main( int argc, char** argv )

{

/// Load source image and convert it to gray

src = imread( "d:\\2.jpg", 1 );

cvtColor( src, src_gray, CV_BGR2GRAY );

/// Create Window

namedWindow( source_window, CV_WINDOW_AUTOSIZE );

/// Create Trackbar to set the number of corners

createTrackbar( "Max corners:", source_window, &maxCorners, maxTrackbar, goodFeaturesToTrack_Demo );

imshow( source_window, src );

goodFeaturesToTrack_Demo( 0, 0 );

waitKey(0);

return(0);

}

/**

* @function goodFeaturesToTrack_Demo.cpp

* @brief Apply Shi-Tomasi corner detector

*/

void goodFeaturesToTrack_Demo( int, void* )

{

if( maxCorners < 1 ) { maxCorners = 1; }

/// Parameters for Shi-Tomasi algorithm

vector<Point2f> corners;

double qualityLevel = 0.01;

double minDistance = 10;

int blockSize = 3;

bool useHarrisDetector = false;

double k = 0.04;

/// Copy the source image

Mat copy;

copy = src.clone();

/// Apply corner detection

goodFeaturesToTrack( src_gray,

corners,

maxCorners,

qualityLevel,

minDistance,

Mat(),

blockSize,

useHarrisDetector,

k );

/// Draw corners detected

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

int r = 4;

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

{ circle( copy, corners[i], r, Scalar(rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255)), -1, 8, 0 ); }

/// Show what you got

namedWindow( source_window, CV_WINDOW_AUTOSIZE );

imshow( source_window, copy );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: