OpenCV2.4.4实现Harris角点检测

本文介绍如何利用OpenCV库中的cornerHarris函数实现Harris角点检测算法,通过调整参数来识别图像中的关键特征点。通过创建滑动条让用户可以实时调整阈值,增强对不同图像的理解与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;
using namespace std;

//全局变量
Mat src, src_gray;//源图和灰度图
int thresh = 200;//默认阈值
int max_thresh = 255;//滑块条最大值


void cornerHarris_demo( int, void* )
{
    Mat dst, dst_norm, dst_norm_scaled;
    dst = Mat::zeros( src.size(), CV_32FC1 );

    //参数
    int blockSize = 2;
    int apertureSize = 3;
    double k = 0.04;

    //Harris角点检测
    cornerHarris( src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );

    //像素归一化到[0,255]
    normalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );
    convertScaleAbs( dst_norm, dst_norm_scaled );//去绝对值后变换为8位无符号类型

    Mat src_copy = src.clone();
    //在角点上画圈
    for( int j = 0; j < dst_norm.rows ; j++ )
    {
        for( int i = 0; i < dst_norm.cols; i++ )
        {
            if( (int) dst_norm.at<float>(j,i) > thresh )
            {
                circle(dst_norm_scaled,Point(i,j),3,Scalar(0));
                circle(src_copy,Point(i,j),3,Scalar(0,255,0));
            }
        }
    }
    /// Showing the result
    namedWindow( "Corners", CV_WINDOW_AUTOSIZE );
    imshow( "Corners", dst_norm_scaled );
    imshow( "Src", src_copy );

}

int main()
{
    //加载源图像并转换为灰度图
    src = imread("horse.jpg");
    cvtColor( src, src_gray, CV_BGR2GRAY );

    //显示源图
    namedWindow( "Src", CV_WINDOW_AUTOSIZE );
    imshow( "Src", src );

    //创建滑块条,并指定回调函数为cornerHarris_demo(),每次滑块位置改变时都会调用此函数
    createTrackbar( "阈值:", "Src", &thresh, max_thresh, cornerHarris_demo );

    //调用函数,计算角点
    cornerHarris_demo( 0, 0 );

    waitKey(0);
    return(0);
}

效果图:


参考

OpenCV2.4.4实现Harris角点检测

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值