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中私有函数调用方法解密
Apr 29 Python
Python实现读取文件最后n行的方法
Feb 23 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python 2.7.14安装图文教程
Apr 08 Python
Python单元测试实例详解
May 25 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
python三方库之requests的快速上手
Mar 04 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
python文件选择对话框的操作方法
Jun 27 Python
python中列表的切片与修改知识点总结
Jul 23 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
基于python实现复制文件并重命名
Sep 16 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中10个不常见却非常有用的函数
2010/03/21 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
用PHP代码给图片加水印
2015/07/01 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
python中list常用操作实例详解
2015/06/03 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python列表(List)知识点总结
2019/02/18 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
公务员个人考察材料
2014/12/23 职场文书
工作保证书
2015/01/17 职场文书
新娘婚礼致辞
2015/07/27 职场文书