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中replace方法实例分析
Aug 20 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python 基础之字符串string详解及实例
Apr 01 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
python实现决策树分类
Aug 30 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
python批量处理txt文件的实例代码
Jan 13 Python
什么是Python中的匿名函数
Jun 02 Python
Python连接Impala实现步骤解析
Aug 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
一个数据采集类
2007/02/14 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
js判断节假日实例代码
2017/12/27 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python表示矩阵的方法分析
2017/05/26 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
信用社员工先进事迹材料
2014/02/04 职场文书
工作保证书范文
2014/04/29 职场文书
2014年优秀党员材料
2014/12/18 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
Java 定时任务技术趋势简介
2022/05/04 Java/Android