Opencv特征提取与检测学习02

Opencv特征提取与检测学习02:Shi-Tomasi角点检测理论

概念

基于harris角点检测的理论,改进了一下计算响应的公式,
在这里插入图片描述
优点:
1.计算速度大大加快
2.能基于我们想要的检测角点的数量,快速检测

API介绍

在这里插入图片描述
1.k就是响应系数,一般0.04~0.06;
2.qualityLevel一般取0.01;
3.bool useHarrisDetector是否使用harris角点检测

代码演示

// Opencv 文件.cpp :
#include "pch.h"
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

/*Harris角点检测
double k = 0.04;
int blocksize = 3;
int ksize = 3;
int thresh=130;//阈值
int max_thresh=255;*/

//Shi-tomasi角点检测
int blocksize = 3;//矩阵M的大小
double k = 0.04;//响应系数
bool useharris = false;//不使用Harris角点检测
int corners=10;//角点数
int max_corners=255;//最大的角点数
double qualityLevel = 0.01;
double minDistance = 10;

void Callback_demo(int, void*);
Mat gray;
Mat src1;
char OUTPUT_WIN[] = "shitomasi_corner";
RNG rng;
int main()
{
	src1 = imread("E:\\360downloads\\home.jpg");
	if (!src1.data) {//!src.data与src.empty()一样;
		printf("failure to load the image1 ");
		return -1;
	}
	namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
	
	imshow("src1", src1);
	cvtColor(src1,gray, COLOR_BGR2GRAY);
	createTrackbar("max_corners", OUTPUT_WIN, &corners, max_corners, Callback_demo);
	Callback_demo(0, 0);
	waitKey(0);
	


	return 0;
}
void Callback_demo(int, void*) {
	//定义一个角点数组,存储计算出的角点
	vector<Point2f> corner;
	goodFeaturesToTrack(gray, corner, corners, qualityLevel, minDistance, Mat(), blocksize, useharris, k);
	//根据corner画出对应的角点
	Mat resultImage = gray.clone();
	cvtColor(resultImage, resultImage, COLOR_GRAY2BGR);//为了显示更明显,变成灰色的rgb图像
	for (int t = 0; t < corner.size(); t++) {
		circle(resultImage, corner[t], 2, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2, 8);

	}
	printf("%d\n", corner.size());
	imshow(OUTPUT_WIN, resultImage);
}

	



在这里插入图片描述
在这里插入图片描述

发布了50 篇原创文章 · 获赞 24 · 访问量 2431

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/103965436