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

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;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络管理:网络故障排查指南
  • HarmonyOS元服务与卡片
  • iOS 顶级神器,巨魔录音机更新2.1正式版
  • Python PDF转图片自定义输出
  • SQL_UNION
  • LeetCode 每日一题 最佳观光组合
  • 浅谈割边及边双连通分量(e-dcc)
  • uni-icons自定义图标详细步骤及踩坑经历
  • 【hot100-java】【完全平方数】
  • iOS 巨魔技巧:一键汉化巨魔商店
  • 【自定义函数】讲解
  • Python Web 面试题
  • 4.结构型设计模式 - 第1回:引言与适配器模式 (Adapter Pattern) ——设计模式入门系列
  • 架构设计笔记-5-软件工程基础知识
  • 黑马智数Day2
  • [ JavaScript ] 数据结构与算法 —— 链表
  • JS基础之数据类型、对象、原型、原型链、继承
  • Protobuf3语言指南
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SSH 免密登录
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 简单数学运算程序(不定期更新)
  • 微信小程序开发问题汇总
  • 优化 Vue 项目编译文件大小
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (12)Hive调优——count distinct去重优化
  • (9)STL算法之逆转旋转
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (强烈推荐)移动端音视频从零到上手(上)
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (转载)虚函数剖析
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET 8.0 发布到 IIS
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core 成都线下面基会拉开序幕
  • .Net 基于MiniExcel的导入功能接口示例
  • .Net环境下的缓存技术介绍
  • .stream().map与.stream().flatMap的使用
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @html.ActionLink的几种参数格式
  • @private @protected @public
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [1525]字符统计2 (哈希)SDUT
  • [20160902]rm -rf的惨案.txt
  • [android] 切换界面的通用处理
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [iOS]GCD(一)
  • [Kubernetes] etcd 单机和集群部署
  • [LeetCode]-283. 移动零-1089. 复写零
  • [LLM]大模型八股知识点(一)
  • [luoguP2401] 不等数列