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

cv2.cornerHarris() 详解(Harris 角点检测)

cv2.cornerHarris() 详解(Harris 角点检测)

cv2.cornerHarris() 是 OpenCV 中实现Harris 角点检测的核心函数,用于检测图像中的角点(角点定义:图像中在两个正交方向上灰度变化都很大的像素点,如物体边缘的交点)。以下是完整的使用指南、参数解析、实战示例和避坑技巧:

一、核心原理

Harris 角点检测通过计算像素点的自相关矩阵,分析该点邻域内的灰度变化:
若两个方向的灰度变化都大 → 角点;
仅一个方向变化大 → 边缘;
无明显变化 → 平坦区域。最终通过响应值(R)判断是否为角点:R > 阈值 则判定为角点。

二、函数语法与参数

dst = cv2.cornerHarris(src, blockSize, ksize, k)

完整使用步骤

# -*- coding:utf-8 -*-importcv2 as cvimportnumpy as npimportsysif__name__=='__main__':# 读取图像image=cv.imread('./images/test.jpg')ifimage is None: print('Failed to read test.jpg.')sys.exit()# 转为灰度图像gray=cv.cvtColor(image, cv.COLOR_BGR2GRAY)# 计算Harris系数harris=cv.cornerHarris(gray,2,3,0.04,borderType=cv.BORDER_DEFAULT)# 对Harris进行归一化便于进行数值比较harris_nor=cv.normalize(harris, None,alpha=0,beta=255,norm_type=cv.NORM_MINMAX)harris_nor=harris_nor.astype('uint8')# 寻找Harris角点kps=[]foriinnp.argwhere(harris_nor>125): kps.append(cv.KeyPoint(i[1], i[0],1))# 绘制角点result=cv.drawKeypoints(image, kps, None)# 展示结果cv.imshow('R', harris_nor)cv.imshow('Harris KeyPoints', result)cv.waitKey(0)cv.destroyAllWindows()

常见错误及解决

错误 1:输入图像类型错误

plaintext
error: (-215:Assertion failed) src.type() == CV_32F || src.type() == CV_8U
原因:输入图像不是单通道灰度图,或未转为浮点型;
解决:确保 src 是灰度图,且执行 gray = np.float32(gray)。

错误 2:角点标记无效果

原因:阈值过高,或 k 取值不合理;
解决:降低阈值(如 0.01dst.max() → 0.005dst.max()),调整 k 至 0.04~0.06。

错误 3:亚像素检测报错

plaintext
error: (-215:Assertion failed) src.size() == patternSize
原因:corners 格式错误(需是 (N,2) 的浮点数组);
解决:确保 corners = np.float32(corners[:, ::-1]) 转换坐标格式。

适用场景与局限性

总结

cv2.cornerHarris() 核心是调参 blockSize、ksize、k,需根据图像分辨率 / 噪声调整;
降噪(高斯模糊)是提升检测效果的关键前置步骤;
高精度场景需结合 cv2.cornerSubPix() 实现亚像素级检测;
对比 Shi-Tomasi 角点检测,Harris 更适合粗检测,Shi-Tomasi 速度更快、结果更稳定。

http://www.cnnetsun.cn/news/192680.html

相关文章:

  • LangFlow Airbrake快速定位代码缺陷
  • 掌握大数据领域 Hive 的动态分区技术
  • 差模电感的作用与滤波性能深度剖析
  • LangFlow vRealize Operations VMware环境优化
  • 户外泳池漆用什么材料好?资深分析师拆解水池蓝耐水抗氯耐候性能
  • 学生上机常见问题:Multisim主数据库无法打开的系统学习
  • Unity3D中实现实时数字孪生的操作指南
  • Wine 中 GDI 绘制的实现原理分析与架构解读
  • 吉因加冲刺港股:上半年营收2.9亿亏4亿 华大基因与爱尔医疗是股东
  • LangFlow Sentry错误日志追踪
  • 前后端分离校园失物招领系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • LangFlow Rigor性能数据基准测试
  • LangFlow iperf3网络带宽性能测试
  • 企业级太原学院商铺管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • Java Web 网上宠物店系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • LangFlow GTmetrix网页性能分析
  • django京东食品销售数据分析系统_4032ydxt 爬虫可视化
  • LangFlow Wireshark Mobile安卓抓包
  • LangFlow Traceroute路由跟踪诊断
  • LangFlow bmon带宽监视器和速率估算
  • LangFlow Hydra暴力破解防护验证
  • 基于Kibana的Elasticsearch索引管理全面讲解
  • LangFlow Packet Capture iOS无越狱抓包
  • LangFlow ECloud EMetrics性能监控
  • STM32CubeMX串口通信接收功能快速上手指南
  • 零基础掌握Elasticsearch可视化工具的数据浏览技巧
  • LangFlow Burp Suite渗透测试代理
  • 2、Windows Server 2012 R2 Hyper-V新特性深度解析(上)
  • 17、深入解析Windows Server 2012 R2的远程桌面服务与PowerShell新特性
  • 18、Windows PowerShell 4.0新特性与实用命令详解