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中asyncore的用法实例
Sep 29 Python
关于python的list相关知识(推荐)
Aug 30 Python
简单了解Python中的几种函数
Nov 03 Python
python字符串的方法与操作大全
Jan 30 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
面向对象学习之pygame坦克大战
Sep 11 Python
Django集成celery发送异步邮件实例
Dec 17 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
python 8种必备的gui库
Aug 27 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
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python向图片里添加文字
2019/11/26 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
保护水资源的标语
2014/06/17 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
经理助理岗位职责
2015/02/02 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
校友会致辞
2015/07/30 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL