harris角点检测
程序员文章站
2024-03-25 19:43:04
...
harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性高,尤其对L型角点检测精度高。但由于采用了高斯滤波,运算速度相对较慢,焦点信息有丢失和位置偏移的现象,而且角点提取有聚簇现象。
实现Harris角点检测:cornerHarris()函数
c++:void cornerHarrid (InputArray src,OutputArray dst,int blockSize,int ksize,double k, intboederType=BORDER_DEFAULT)
第一个参数:InputArray类型的src,输入图像,即原图像,填Mat类的对象即可,且需为单通道8位或者浮点型图像。
第二个参数:OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放Harris角点检测的输出结果,和原图片有一样的尺寸和类型。
第三个参数:int类型的blockSize,表示领域的大小。
第四个参数:int类型的ksize,表示Soble()算子的孔径大小。
第五个参数:double类型的k,Harris参数。
第六个参数:int类型的borderType,图像像素的边界模式。注意它有默认值BORDER_DEFAULT.
#include<opencv2\opencv.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
using namespace cv;
int main()
{
//以灰度模式载入图像并显示
Mat src=imread("2.jpg",0);
imshow("【原始图】",src);
//进行Harris角点检测找出角点
Mat cornerStrength;
cornerHarris(src,cornerStrength,2,3,0.01);
//对灰度图进行阈值操作,得到二值图并显示
Mat harrisCorner;
threshold(cornerStrength,harrisCorner,0.00001,255,THRESH_BINARY);
imshow("【角点检测后的二值效果图】",harrisCorner);
waitKey(0);
return 0;
}