OpenCV-Python官方教程-22-Harris角点检测
1 原理(略)
2.1 OpenCV中的Harris角点检测
OpenCV中的函数cv2.cornerHarris()可以用来进行角点检测。参数如下:
- img:数据类型为float32的输入图像。
- blockSize:角点检测中要考虑的邻域大小。
- ksize:Sobel求导中使用的窗口大小。
- k:Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]
代码演示:
import cv2
import numpy as npimg = cv2.imread('xiangqi.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)#输入图像必须是float32,最后一个参数在0.04到0.05
dst = cv2.cornerHarris(gray,2,3,0.04)
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) == 27:cv2.destroyAllWindows()
2.2 亚像素级精确度的角点
有时我们需要最大精度的角点检测。OpenCV 为我们提供了函数 cv2.cornerSubPix(),它可以提供亚像素级别的角点检测。下面是一个例子。首先我们要找到 Harris角点,然后将角点的重心传给这个函数进行修正。Harris 角点用红色像素标出,绿色像素是修正后的像素。在使用这个函数是我们要定义一个迭代停止条件。当迭代次数达到或者精度条件满足后迭代就会停止。我们同样需要定义进行角点搜索的邻域大小。
import cv2
import numpy as np
# find Harris corners
img = cv2.imread('xiangqi.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
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
#connectedComponentsWithStats(InputArray image, OutputArray labels, OutputArray stats,
#OutputArray centroids, int connectivity=8, int ltype=CV_32S)
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)#Python: cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria)
#zeroZone – Half of the size of the dead region in the middle of the search zone
#over which the summation in the formula below is not done. It is used sometimes
# to avoid possible singularities of the autocorrelation matrix. The value of (-1,-1)
# indicates that there is no such a size.
# 返回值由角点坐标组成的一个数组(而非图像)
corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria)res = np.hstack((centroids,corners))
#np.int0 可以用来省略小数点后面的数字(非四㮼五入)。
res = np.int0(res)
img[res[:,1],res[:,0]] = [0,0,255]
img[res[:,3],res[:,2]] = [0,2555,0]
cv2.imshow('111',img)
cv2.waitKey(0)
结果如下,为了方便查看我们对角点的部分进行了放大:
OpenCV-Python官方教程-22-Harris角点检测相关推荐
- OpenCV与图像处理学习十三——Harris角点检测(含代码)
OpenCV与图像处理学习十三--Harris角点检测(含代码) 一.角点的概念 二.Harris角点检测的实现过程 三.Harris代码应用 一.角点的概念 角点: 在现实世界中, 角点对应于物体的 ...
- OpenCV入门学习笔记之Harris角点检测与SIFT特征匹配算法
1. 写在前面 这篇文章整理两个图像处理中非常重要的算法,一个是Harris角点检测算法,另一个是SIFT特征匹配算法,这两个算法本质上还是去找图像里面的关键特征点,帮助我们后续更好的理解图像以及做各 ...
- opencv (五十一)Harris角点检测
小白学视觉,笔记,扩展 #include <opencv2/opencv.hpp> #include<iostream>using namespace cv; using na ...
- cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8763369.html 参考文献----------OpenCV-Python-Toturial ...
- Harris角点检测python实现及基于opencv实现
写在前面: 黄宁然, 七月,骄阳似火. 参考文献镇楼: [1]袁志聪,基于harris特征的点云配准方法研究 [2]高亭,基于改进Harris角点检测的印刷体文档图像检索技术 [3]景庆阳,基于har ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- 基于Python手动实现Harris角点检测
最近在上数字图像处理课程,需要使用Python手动编写Harris角点检测算法,但是网上几乎没有找到手动编写的,只能手敲. 同时作为自己的第一篇博客,在这里记录一下. 一.Harris角点检测 原理( ...
- Python计算机视觉——Harris角点检测
Python计算机视觉--Harris角点检测 文章目录 Python计算机视觉--Harris角点检测 写在前面 1 Harris角点检测基本思想 2 Harris角点检测公式推导 3 实验分析 写 ...
- OpenCV角点检测之Harris角点检测
本篇文章中,我们一起探讨了OpenCV中Harris角点检测相关的知识点,学习了OpenCV中实现Harris角点检测的cornerHarris函数的使用方法.此博文一共有两个配套的麻雀虽小但五脏俱全 ...
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...
最新文章
- 全网仅此一篇:工业级压力传感器设计及实现(华大半导体HC32L136)
- 剑指offer 算法(栈和队列 查找和排序)
- java snack_JSONPath小试牛刀之Snack3
- 2018刑侦推理 java_2018年刑侦科目推理试题
- Windows CE(C#)嵌入式应用开发pdf
- 趣说技术 | 用MQ 能完全替代 RPC 调用?
- python 近期用到的基础知识汇总(主要是skimage的相关矩阵变化函数)(二)
- 【回文串7】LeetCode 234. Palindrome Linked List
- 苹果cms用php几,苹果CMS用的B站播放器
- html rgb 颜色转换,将RGBA颜色转换为HTML颜色代码
- How To Clone Scrypt Based Altcoins for Fun and Profit
- Python语言程序设计前言
- 第015讲: 跟王家林学习从1000个代码案例中学习人工智能和大数据实战第015讲:Scala中Tuple源码剖析及代码实践
- 我用计算机写作文,教学设计:我用计算机写作文
- 程序员吃饭段子Java吃完就走_爆笑段子:一朋友是个程序员,有一次和他吃饭,他愁眉苦脸的说...
- How To JUST DO IT
- 如何用Windows自带画图工具将图片设置成透明背景
- parsec(The parsec benchmark suit )使用教程
- 计算机信息采集方式有哪些,数据监控都有哪些信息采集渠道
- Git命令详解及工作实用流程