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删除过期文件的方法
May 29 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
django序列化serializers过程解析
Dec 14 Python
Python程序控制语句用法实例分析
Jan 14 Python
python输出pdf文档的实例
Feb 13 Python
大数据分析用java还是Python
Jul 06 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 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 输出缓存详解
2009/06/20 PHP
PHP无限分类(树形类)
2013/09/28 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
vue中activated的用法
2021/01/03 Vue.js
Python导入txt数据到mysql的方法
2015/04/08 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python Selenium 库的使用技巧
2020/10/16 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
入党积极分子思想汇报
2014/01/02 职场文书
《海底世界》教学反思
2014/04/16 职场文书
员工合理化建议书
2014/05/19 职场文书
销售竞赛活动方案
2014/08/23 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
Python移位密码、仿射变换解密实例代码
2021/06/27 Python