当前位置: 首页 > article >正文

OpenCV特征检测(12)检测图像中的潜在角点函数preCornerDetect()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算用于角点检测的特征图。
该函数计算源图像的基于复杂空间导数的函数
dst = ( D x src ) 2 ⋅ D y y src + ( D y src ) 2 ⋅ D x x src − 2 D x src ⋅ D y src ⋅ D x y src \texttt{dst} = (D_x \texttt{src} )^2 \cdot D_{yy} \texttt{src} + (D_y \texttt{src} )^2 \cdot D_{xx} \texttt{src} - 2 D_x \texttt{src} \cdot D_y \texttt{src} \cdot D_{xy} \texttt{src} dst=(Dxsrc)2Dyysrc+(Dysrc)2Dxxsrc2DxsrcDysrcDxysrc
其中 D x D_x Dx, D y D_y Dy 是第一阶图像导数, D x x D_{xx} Dxx, D y y D_{yy} Dyy 是第二阶图像导数, D x y D_{xy} Dxy 是混合导数。
角点可以通过该函数的局部最大值来找到,如下所示:

Mat corners, dilated_corners;
preCornerDetect(image, corners, 3);
// dilation with 3x3 rectangular structuring element
dilate(corners, dilated_corners, Mat(), 1);
Mat corner_mask = corners == dilated_corners;

preCornerDetect 是 OpenCV 中的一个函数,用于检测图像中的潜在角点。该函数通过对图像进行预处理来增强角点特征,使得后续的角点检测算法(如 goodFeaturesToTrack 或 cornerHarris)能够更准确地检测角点。

函数原型


void cv::preCornerDetect
(
	InputArray 	src,
	OutputArray 	dst,
	int 	ksize,
	int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src: 单通道8位或浮点类型的源图像。
  • 参数dst: 输出图像,类型为 CV_32F,大小与 src 相同。
  • 参数ksize: Sobel 操作的孔径大小。
  • 参数borderType: 像素外推方法。参见 BorderTypes。BORDER_WRAP 不支持。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    // 加载图像
    cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );

    if ( src.empty() )
    {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

 // 创建一个窗口显示原始灰度图像
    cv::namedWindow("Input Image", cv::WINDOW_AUTOSIZE);
    cv::imshow("Input Image", src);

    // 创建一个输出图像用于存储结果
    cv::Mat dst;

    // 应用 preCornerDetect 函数
    int blockSize = 7;
   
    // 使用 BORDER_REFLECT 作为边界类型
    cv::preCornerDetect(src, dst, blockSize, cv::BORDER_REFLECT);

    // 创建一个窗口显示处理后的图像
    cv::namedWindow("Pre-Corner Detect Result", cv::WINDOW_AUTOSIZE);
    cv::imshow("Pre-Corner Detect Result", dst);

    // 等待按键后退出
    cv::waitKey();
    return 0;
}

运行结果

在这里插入图片描述


http://www.kler.cn/a/317439.html

相关文章:

  • SQL中的时间类型:深入解析与应用
  • 2分钟在阿里云ECS控制台部署个人应用(图文示例)
  • python——面向对象
  • 【大数据学习 | HBASE高级】storeFile文件的合并
  • 时序论文20|ICLR20 可解释时间序列预测N-BEATS
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • 使用ffmpeg实现音视频文件格式转换
  • C语言从头学62——学习头文件stdlib.h(一)
  • 如何通过蜂巢(容器安全)管理内部部署数据安全产品与云数据安全产品?
  • 【Android】 IconFont的使用
  • 一体化运维监控管理平台的全面监控能力
  • 使用Hutool-poi封装Apache POI进行Excel的上传与下载
  • 单线服务器是什么?单线服务器有什么优点?
  • 掌握 Flutter 中的 `Overlay` 和 `OverlayEntry`:弹窗管理的艺术
  • 如何将Vue项目部署至 nginx
  • 力扣最热一百题——最小覆盖子串
  • 【优选算法之前缀和】No.6--- 经典前缀和算法
  • Unity webgl跨域问题 unity使用nginx设置跨域 ,修改请求头
  • 基于微信小程序的宠物寄养平台的设计与实现+ssm(lw+演示+源码+运行)
  • Adams与Matlab通过FMI联合仿真
  • 我的AI工具箱Tauri版-FunAsr音频转文本
  • git 删除 git push 失败的记录
  • 阿里开源多模态大模型Ovis1.6,重塑出海电商AI格局
  • python自学笔记
  • 价格便宜又好用的云电脑挑选:ToDesk云电脑 vs 青椒云
  • oracle rac多个实例就相当于多个数据库系统程序