【OpenCV 您所在的位置:网站首页 opencv角点检测python 【OpenCV

【OpenCV

2024-07-12 20:29| 来源: 网络整理| 查看: 265

27.OpenCV的特征检测——角检测

文章目录 前言一、哈里斯角检测二、优化哈里斯角检测三、Shi-Tomasi角检测四、OpenCV-Python资源下载总结

前言

  图像的特征是指图像中具有独特性和易于识别性的区域,角、边缘等都属于有意义的特征。OpenCV可以检测并提取图像的特征,并对其进行描述,以便用于图像匹配和搜索。   特征检测中的角是两条边的交点,也可称为角点、拐点,它是图像中各个方向上强度变化最大的区域。OpenCV中的cv2.cornerHarris()、cv2.cornerSubPix()、cv2.goodFeaturesToTrack()函数用于角检测。

一、哈里斯角检测

  哈里斯角检测是克里斯·哈里斯(Chris Harris)和迈克尔·斯蒂芬斯(Mike Stephens)在他们的论文中提出的一种角检测方法。   cv2.cornerHarris()函数根据哈里斯角检测器算法检测图像中的角,其基本格式如下:

dst = cv2.cornerHarris(src, blockSize, ksize, k) dst为返回的结果, 它是一个numpy.ndarray对象, 大小和src相同, 每一个数组元素对应一个像素点, 其值越大, 对应像素点是角的概率越高 src为8位单通道或浮点值图像 blockSize为领域大小, 值越大, 检测出的角占的区域就越大 ksize为哈里斯角检测器使用的Sobel算子的中孔参数 k为哈里斯角检测器的自由参数, ksize和k影响检测的敏感度, 值越小, 检测出的角越多, 但准确率越低 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread("five.jpg") cv2.imshow("Five",img) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("Five_gray",gray) gray = np.float32(gray) dst = cv2.cornerHarris(gray, 8, 7, 0.01) img[dst>0.02*dst.max()] = [0,0,255] # 将检测结果中值大于“最大值0.02”的对应像素设置为红色 cv2.imshow("dst",img) cv2.waitKey(0) cv2.destroyAllWindows()

在这里插入图片描述

二、优化哈里斯角检测

  使用cv2.cornerHarris()函数检测出来的角称为哈里斯角,它包含了一定数量的像素。有时,可能需要对哈里斯角进行进一步处理,找出更精确的位置。   cv2.cornerSubPix()函数用于优化哈里斯角,找出更精确的角的位置,其基本格式如下:

dst = cv2.cornerSubPix(src, corners, winSize, zeroZone, criteria) dst为返回结果, 存储优化后的角的信息 src为8位单通道或浮点值图像 corners为哈里斯角的质心坐标 winSize为搜索窗口边长的一半 zeroZone为零值边长的一半 criteria为优化查找的终止条件 img = cv2.imread("cube.jpg") # 打开图像,默认BGR格式 cv2.imshow("Cube", img) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像 cv2.imshow("Cube_gray", gray) gray = np.float32(gray) # 转换为浮点类型 dst = cv2.cornerHarris(gray, 8, 7, 0.04) # 查找哈里斯角 r, dst = cv2.threshold(dst,0.01*dst.max(),255,0) # THRESH_BINARY=0,二值化阈值处理 cv2.imshow('THRESH_BINARY', dst) dst = np.uint8(dst) # 转换为整型 r, l, s, cxys = cv2.connectedComponentsWithStats(dst) # 查找质点坐标 cif = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,100,0.001) # 定义优化查找条件 corners = cv2.cornerSubPix(gray, np.float32(cxys), (5,5), (-1,-1),cif) # 执行优化查找 res = np.hstack((cxys, corners)) # 堆叠构造新数组,便于标注角 res = np.int0(res) # 转换为整型 img[res[:,1],res[:,0]] = [0,0,255] # 将哈里斯角对应像素设置为红色 img[res[:,3],res[:,2]] = [0,255,0] # 将优化结果像素设置为绿色 cv2.imshow("Cube_SubPix", img) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.waitKey(0) cv2.destroyAllWindows()

在这里插入图片描述   放大后立方体的一个角,可以看出绿色和红色角的位置: 在这里插入图片描述

三、Shi-Tomasi角检测

  Shi-Tomasi角检测是史建波(Jianbo Shi)和卡罗·托马西(Carlo Tomasi)在哈里斯角检测的基础上提出的改进角检测方法。   OpenCV的cv2.goodFeaturesToTrack()函数使用Shi-Tomasi角检测器查找图像中的N个最强角,其基本格式如下:

dst = cv2.goodFeaturesToTrack(src, maxCorners, qualityLevel, minDistance) dst为返回的结果, 保存了检测到的角在原图中的坐标 src为8位单通道或浮点值图像 maxCorners为返回的角的最大数量 qualityLevel为可接受的角的最低质量 minDistance为返回的角之间的最小欧几里得距离 img = cv2.imread("five.jpg") cv2.imshow("Five", img) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray = np.float32(gray) corners = cv2.goodFeaturesToTrack(gray, 6, 0.1, 100) corners = np.int0(corners) for i in corners: x, y = i.ravel() cv2.circle(img, (x,y), 4, (0,0,255), -1) cv2.imshow("Shi-Tomasi",img) cv2.waitKey(0) cv2.destroyAllWindows()

在这里插入图片描述

四、OpenCV-Python资源下载

OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码

总结

  以上内容介绍了OpenCV-Python特征检测中的角检测,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有