#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("building.jpg");
imshow("【原图】", srcImage);
//因为角点检测的输入图像是单通道的,所以需要一个灰度图
Mat grayImage;
cvtColor(srcImage, grayImage, CV_BGR2GRAY);
//进行Harris角点检测
Mat dstImage;
cornerHarris(grayImage, dstImage, 2, 3, 0.01);
//函数调用后,得到的是 一组被检测到的角点的灰度值的集合(dstImage是角点灰度值的矩阵)
//而且灰度值很小,所以如果直接显示,肉眼将无法分辨
//直接显示
imshow("【直接显示】", dstImage);
//阀值后显示
Mat thredImage;
threshold(dstImage, thredImage, 0.0001, 255, CV_THRESH_BINARY);
imshow("【阀值后显示】", thredImage);
//另外一种显示方式
//遍历角点图中的点的灰度值,如果大于某个值,就显示出来
Mat showImage;
srcImage.copyTo(showImage);
Mat normalImage;
//因为现在得到的角点图中的点的灰度值很小,为了方便计算,将这些灰度值规整(归一化操作)
normalize(dstImage, normalImage, 0, 255, 32);
for (int i = 0; i < showImage.rows; i++)
{
for (int j = 0; j < showImage.cols; j++)
{
if (normalImage.at<float>(i, j) > 15)
opencv3 实现Harris角点检测:cornerHarris函数
最新推荐文章于 2025-06-11 08:23:56 发布