OpenCV哈里斯(Harris)角点检测的实现


Posted in Python onJanuary 15, 2020

环境

pip install opencv-python==3.4.2.16
 
pip install opencv-contrib-python==3.4.2.16

理论

克里斯·哈里斯Chris Harris)和迈克·史蒂芬斯(Mike Stephens)在1988年的论文《组合式拐角和边缘检测器》中做了一次尝试找到这些拐角的尝试,所以现在将其称为哈里斯拐角检测器。

函数:cv2.cornerHarris()cv2.cornerSubPix()

示例代码

import cv2
import numpy as np
 
filename = 'molecule.png'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
 
#result is dilated for marking the corners, not important
dst = cv2.dilate(dst,None)
 
# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]
 
cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
  cv2.destroyAllWindows()

原图

OpenCV哈里斯(Harris)角点检测的实现

输出图

OpenCV哈里斯(Harris)角点检测的实现

SubPixel精度的角落

import cv2
import numpy as np
 
filename = 'molecule.png'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
# find Harris corners
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0)
dst = np.uint8(dst)
 
# find centroids
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)
 
# define the criteria to stop and refine the corners
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria)
 
# Now draw them
res = np.hstack((centroids,corners))
res = np.int0(res)
img[res[:,1],res[:,0]]=[0,0,255]
img[res[:,3],res[:,2]] = [0,255,0]
 
cv2.imwrite('subpixel5.png',img)

输出图

OpenCV哈里斯(Harris)角点检测的实现

参考

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html#harris-corners

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表(list)常用操作方法小结
Feb 02 Python
Python解决八皇后问题示例
Apr 22 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 Python
Pytorch模型转onnx模型实例
Jan 15 #Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 #Python
详解Python实现进度条的4种方式
Jan 15 #Python
pytorch常见的Tensor类型详解
Jan 15 #Python
pytorch 常用线性函数详解
Jan 15 #Python
python3.8下载及安装步骤详解
Jan 15 #Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 #Python
You might like
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
基于文本的访客签到簿
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
php split汉字
2009/06/05 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python+mysql实现教务管理系统
2019/02/20 Python
python版百度语音识别功能
2019/07/09 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
python中wx模块的具体使用方法
2020/05/15 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
三严三实心得体会范文
2014/10/13 职场文书
慰问信格式
2015/02/14 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
2015年公司工作总结
2015/04/25 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis