1. 程式人生 > >萌新學習手冊:Shi-Tomasi角點檢測

萌新學習手冊:Shi-Tomasi角點檢測

Shi-Tomas是對Harris演算法的一種改進,效率也得到了大幅的改進。

首先介紹API

void goodFeaturesToTrack( InputArray image, 
                          OutputArray corners,
                          int maxCorners, 
                          double qualityLevel, double minDistance,
                          InputArray mask=noArray(), 
                          int blockSize=3,
                          bool useHarrisDetector=false, 
                          double k=0.04 );

演算法將處理影象依照公式求出所有大於設定閾值的點並儲存在一個vector中,若點數超過設定的最大數量那麼將選取特徵最明顯的前幾個

image:8位或32位單通道灰度影象;

corners:位置點向量,儲存的是檢測到的角點的座標;

maxCorners:定義可以檢測到的角點的數量的最大值;

qualityLevel:檢測到的角點的質量等級,角點特徵值小於qualityLevel*最大特徵值的點將被捨棄;

minDistance:兩個角點間最小間距,以畫素為單位;

mask:指定檢測區域,若檢測整幅影象,mask置為空Mat();

blockSize:計算協方差矩陣時視窗大小;

useHarrisDetector:是否使用Harris角點檢測,為false,則使用Shi-Tomasi運算元;

k:留給Harris角點檢測運算元用的中間引數,一般取經驗值0.04~0.06。第八個引數為false時,該引數不起作用;

RNG rng(1234);
rng.uniform(0,255)

這是一個用於生成偽隨機數的方法,當然,如果你想要生成的偽隨機數是小數(例如大於等於0小於1)需要在呼叫rng.uniform(0.,1.)也就是傳入兩個浮點數型別

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
Mat src, gray_src;
int corner_num = 25;
int max_corner = 200;
const char* output_title = "ShiTomasi Detector";
RNG rng(1234);

void ShiTomas_Demo(int, void*);

int main(int argc, char** argv) {
	src = imread("C:/Users/pbiha/Desktop/image/2.png");
	if (src.empty()) {
		puts("Can't find the image...");
		return -1;
	}
	namedWindow("input", CV_WINDOW_AUTOSIZE);
	imshow("input", src);
	cvtColor(src, gray_src, COLOR_BGR2GRAY);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);

	createTrackbar("Num corner:", output_title, &corner_num, max_corner, ShiTomas_Demo);
	ShiTomas_Demo(0, 0);
	waitKey(0);
	return 0;
}
void ShiTomas_Demo(int, void*) {
	if (corner_num < 5)corner_num = 5;
	vector<Point2f>corners;
	double qualityLevel = 0.01;
	double minDistance = 15;
	int blockSize = 3;
	bool useHarris = false;
	double k = 0.04;
	
	Mat resultImg = src.clone();

	goodFeaturesToTrack(gray_src, corners, corner_num, qualityLevel, minDistance, Mat(), blockSize, useHarris, k);
	printf("%d\n", corners.size());

	for (int i = 0; i < corners.size(); i++) {
		circle(resultImg, corners[i], 2, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2, 8, 0);
	}
	imshow(output_title, resultImg);
}

相關推薦

學習手冊Shi-Tomasi檢測

Shi-Tomas是對Harris演算法的一種改進,效率也得到了大幅的改進。 首先介紹API void goodFeaturesToTrack( InputArray image, OutputArray corn

opencv學習筆記(002)——Shi-Tomasi檢測

opencv學習筆記(002)——Shi-Tomasi角點檢測參考資料學習過程學習筆記 參考資料 學習過程 在看他人的學習筆記的時候,感覺自己還是有些不足的地方,又重新去修改了上一篇筆記。 這次看這個角點檢測的時候,明顯輕鬆很多了,畢竟也是有點底子了,爽。

學習手冊亞畫素級別檢測

在現實應用中我們的角點往往並不是整數,所以為了提高我們尋找角點的精確程度,我們需要進行處理,一般有三種方法 1.插值方法 2.基於影象矩計算 3.圖線擬合(高斯曲面,多項式,橢圓曲面)其中高斯曲面最為常用 具體的使用過程就是我們先用Shi-Tomasi角點檢測 把角點

學習手冊openCV中Hassi檢測

createTrackbar(const string& trackbarname, const string& winname, int

學習手冊surf特徵檢測

#include<opencv2/xfeatures2d.hpp> using namespace xfeatures2d;  嗯,在開頭要包含這個庫然後申明名稱空間 src = i

檢測彙總HarrisShi-Tomasi檢測

一、角點定義 有定義角點的幾段話: 1、角點檢測(Corner Detection)是計算機視覺系統中用來獲得影象特徵的一種方法,廣泛應用於運動檢測、影象匹配、視訊跟蹤、三維建模和目標識別等領域中。也稱為特徵點檢測。 角點通常被定義為兩條邊的交點,更嚴格的說,角點的區域性鄰

檢測HarrisShi-Tomasi檢測

角點 特徵檢測與匹配是Computer Vision 應用總重要的一部分,這需要尋找影象之間的特徵建立對應關係。點,也就是影象中的特殊位置,是很常用的一類特徵,點的區域性特徵也可以叫做“關鍵特徵點”(keypoint feature),或“興趣點”(interest p

【OpenCV】檢測HarrisShi-Tomasi檢測

角點 特徵檢測與匹配是Computer Vision 應用總重要的一部分,這需要尋找影象之間的特徵建立對應關係。點,也就是影象中的特殊位置,是很常用的一類特徵,點的區域性特徵也可以叫做“關鍵特徵點”(keypoint feature),或“興趣點”(interest poi

HarrisShi-Tomasi檢測(轉)

wid fast 進度 -cp 成了 out gif 角點檢測 自定義 一、角點定義 有定義角點的幾段話: 1、角點檢測(Corner Detection)是計算機視覺系統中用來獲得圖像特征的一種方法,廣泛應用於運動檢測、圖像匹配、視頻跟蹤、三維建模和目標識別等領域中。也

Opencv2D特徵框架---Shi-Tomasi檢測

程式碼 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> #include <st

OpenCv-C++-Shi-Tomasi檢測

這次的tomasi跟上次的harris比,兩者原理上很像,可以說tomasi是harris的進化版。個人覺得,如果做角點檢測的話,首選tomasi,因為它優化很好,響應速度比harris快。拖動TrackBar時,真的快如風,但使用harris時,有時還會崩掉。 tomasi基本原理如下:

goodFeaturesToTrack——Shi-Tomasi檢測

J.Shi和C.Tomasi在1994年在其論文“Good Features to Track”中,提出了一種對Harris角點檢測運算元的改進演算法——Shi-Tomasi角點檢測運算元,可以看到,

Opencv2.4學習形態學濾波-檢測

形態學濾波-角點檢測 就是利用形態學處理中的腐蝕和膨脹操作進行的角點檢測、邊緣檢測。 基本步驟 第一步:十字型核-------->【對原圖:膨脹操作】 效果:原圖在水平和垂直方向會擴充套件,而45度.135度方向沒有得到擴充套件 目的:目的是使得在下一步的

0037-OpenCV環境下用演算法moravec、harris、Shi-Tomasi進行檢測

角點的定義: “如果某一點在任意方向的一個微小變動都會引起灰度很大的變化,那麼我們就把它稱之為角點”。角點一般反應的是影象中區域性最大值或最小值的孤立點,以角點為中心點的視窗向影象中的任意方向滑動,都會引起較大的灰度變化。 角點檢測(Corner Detection)是計算機視覺系統中用來獲得影象特

區域性特徵——檢測(Harris,Shi-Tomasi

1. 何為角點? 下面有兩幅不同視角的影象,通過找出對應的角點進行匹配。 再看下圖所示,放大影象的兩處角點區域: 我們可以直觀的概括下角點所具有的特徵: 輪廓之間的交點; 對於同一場景,即使視角發生變化,通常具備穩定性質的特徵; 該點附近區域的畫素點無論在

OpenCV學習筆記(14)形態學濾波對影象進行邊緣及檢測

</pre><pre name="code" class="cpp">#include "stdafx.h" #include<opencv2/opencv.hpp> using namespace cv; class MorphoFe

OpenCV 檢測(三) Shi-Tomasi

Shi-Tomasi運算元 就像Harrise運算元是在Moravec運算元的基礎上改進得到的一樣: http://blog.csdn.net/chaipp0607/article/details/54692818 Shi-Tomasi運算元是在Harri

學習SpringMVC

## 前言 > 只有光頭才能變強。 > **文字已收錄至我的GitHub精選文章,歡迎Star**:[https://github.com/ZhongFuCheng3y/3y](https://github.com/ZhongFuCheng3y/3y) 這篇`SpringMVC`被催了很

OpenCV探索之路(十五)檢測

回調函數 閾值 source and 類型 幾何 擁有 .com named 角點檢測是計算機視覺系統中用來獲取圖像特征的一種方法。我們都常說,這幅圖像很有特點,但是一問他到底有哪些特點,或者這幅圖有哪些特征可以讓你一下子就識別出該物體,你可能就說不出來了。其實說圖像的特征

關於匹配,檢測後產生描述子後使用KNN匹配時的錯誤

cout<<"型別1: "<<desc1.type()<<endl; desc1.convertTo(desc1, CV_32F); desc2.convertTo(desc2, CV_32F); cout<<"型別2: "<