【Python】【OpenCV】检测直线和圆
重新理解一下Canny方法:
参数:
- image:输入的图像。
- threshold1:第一个阈值,用于检测边缘的强度梯度的下限。
- threshold2:第二个阈值,用于检测边缘的强度梯度的上限。
- apertureSize:Sobel算子的大小,可选值为3、5、7,默认值为3。
- L2gradient:一个布尔值,指示是否使用更精确的L2范数计算梯度幅值,默认值为False。
返回值:
- edges:包含边缘的输出图像。它是一个二进制图像,其中白色像素表示检测到的边缘,黑色像素表示未检测到的边缘。
cv2.HoughLineP():
参数:
- image:输入的二值图像,通常是经过边缘检测的结果。
- rho:极径步长,表示以像素为单位的距离精度。一般情况下,使用1即可。
- theta:极角步长,表示以弧度为单位的角度精度。一般情况下,使用np.pi/180即可。
- threshold:直线投票阈值,只有当累积器中的值高于该阈值时,才会被认为是一条直线。
- minLineLength:线段的最小长度。比这个长度短的线段不会被检测到。
- maxLineGap:允许两条线段之间的最大间隔,小于该值则被视为一条线段。
返回值:
- lines:检测到的直线的参数表示。它是一个包含直线的起点和终点坐标的数组,每个直线由四个浮点数(x1, y1, x2, y2)表示。
检测线段:
1 import cv2
2 import numpy as np
3
4 img = cv2.imread('../images/lines.jpg')
5 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
6
7 # 寻找边缘
8 edges = cv2.Canny(gray, 50, 120)
9
10 # 寻找直线
11 lines = cv2.HoughLinesP(edges, rho=1,
12 theta=np.pi/180.0,
13 threshold=20,
14 minLineLength=50,
15 maxLineGap=5)
16
17 # lines此时是一个三维数组
18 for line in lines:
19 # line此时即为二维数组,且只有一个元素(只包含一个一维数组)
20 x1, y1, x2, y2 = line[0]
21 cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
22
23 cv2.imshow("edges", edges)
24 cv2.imshow("lines", img)
25 cv2.waitKey()
26 cv2.destroyAllWindows()
检测圆形:
cv2.medianBlur():
参数解释:
src:输入图像,8 位单通道或 3 通道图像。ksize:滤波器大小,必须是正奇数,例如 3、5、7 等。(代表的是 Number x Number 大小的矩阵)dst:输出图像,与输入图像大小和类型相同,可选参数。
返回值:
- 如果指定了
dst,则返回dst;否则,返回滤波后的图像。
cv2.HoughCircles():
参数:
image:输入的单通道灰度图像。method:表示使用的检测方法,目前只支持cv2.HOUGH_GRADIENT。dp:累加器分辨率与图像分辨率的反比。这个参数影响圆心的累加器分辨率。如果dp=1,累加器的分辨率与图像的分辨率相同。如果dp=2,累加器的分辨率是图像分辨率的一半。一般来说,dp值越大,检测速度越快,但可能会错过一些小圆;而dp值越小,检测速度越慢,但可以检测到更小的圆。minDist:检测到的圆心之间的最小距离。如果这个距离小于该值,则认为是同一个圆。param1:用于 Canny 边缘检测的高阈值。在进行圆检测之前,需要先进行边缘检测。这个参数用来设置 Canny 边缘检测算法的高阈值。低阈值是高阈值的一半。param2:圆心累加器阈值。这个参数用于确定圆心的累加器阈值。只有当累加器的值大于param2时,才认为是一个圆。值越小,检测到的圆越多,但可能会有更多的误检测。minRadius:圆的最小半径。maxRadius:圆的最大半径。
函数的返回结果是一个包含检测到的圆的信息的 Numpy 数组,每行包含三个元素:圆心的 x 坐标、y 坐标以及圆的半径。
cv2.circle():
参数解释:
img:要绘制圆形的图像。center:圆心的坐标,可以是一个元组(x, y)。radius:圆的半径。color:圆的颜色,可以是一个元组(B, G, R),表示蓝、绿、红的通道值。thickness:圆边界的厚度,如果为负值则表示填充整个圆形。
1 import cv2
2 import numpy
3
4 img = cv2.imread('../images/planet_glow.jpg')
5 # 转灰度图
6 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
7 # 中值模糊
8 gray = cv2.medianBlur(gray, 5)
9
10 circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT,
11 1, 90,
12 param1=100, param2=30,
13 minRadius=0, maxRadius=0)
14
15 circles = numpy.uint16(numpy.around(circles))
16
17 for i in circles[0, :]:
18 # 绘制圆轮廓
19 cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
20 # 绘制圆心
21 cv2.circle(img, (i[0], i[1]), 1, (0, 0, 255), 2)
22
23 cv2.imshow('plant', img)
24 cv2.waitKey()
25 cv2.destroyAllWindows()
【Python】【OpenCV】检测直线和圆的更多相关文章
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- hough变换检测直线和圆
图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
http://blog.csdn.net/on2way/article/details/47028969 http://blog.csdn.net/mokeding/article/details/1 ...
- python+opencv检测图像清晰度
直接上代码,list_jian.txt为待检测图像路径列表 import cv2 import numpy as np import os for path in open("list_ji ...
- python opencv 检测特定颜色
import cv2 import numpy as np cap = cv2.VideoCapture(0) # set blue thresh 设置HSV中蓝色.天蓝色范围 lower_blue ...
- OpenCV 学习笔记03 直线和圆检测
检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
- Python+OpenCV图像处理(十五)—— 圆检测
简介: 1.霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径.极角空间被三维的圆心和半径空间取代.在标准霍夫圆变换中,原图像的边缘图像的任意点对应的经过这个点的所有可能圆在三维空间用圆心 ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
随机推荐
- 给你的模糊测试开开窍——定向灰盒模糊测试(Directed Greybox Fuzzing)综述
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 原论文:<The Progress, Cha ...
- 使用HTML一键打包IPA工具打包KRPANO全景项目
该软件已经被GDB苹果网页一键打包工具取代,详情参考如下链接 GDB苹果网页一键打包 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码 ...
- Java开发面试--Redis专区
1. 什么是Redis?它的主要特点是什么? 答: Redis是一个开源的.基于内存的高性能键值对存储系统.它主要用于缓存.数据存储和消息队列等场景. 高性能:Redis将数据存储在内存中,并采用单线 ...
- 【c#版本Openfeign】Net8 自带OpenFeign实现远程接口调用
引言 相信巨硬,我们便一直硬.Net版本到现在已经出了7了,8也已经在预览版了,相信在一个半月就会正式发布,其中也有很多拭目以待的新功能了,不仅仅有Apm和Tap的结合,TaskToAscynResu ...
- std::for_each易忽略点
以下代码为修改vector内部的每一个元素,使其每个元素大小变为原来的平方. std::vector v1{1, 2, 4, 2}; std::for_each(begin(v1), end(v1), ...
- ISIS 协议常用基本配置总结
转载请注明出处: 1.创建IS-IS进程,进入IS-IS进程 [Huawei] isis [process-id ] 参数process-id用来指定一个IS-IS进程.如果不指定参数process- ...
- Jackson--FastJson--XStream--代码执行&&反序列化
Jackson--FastJson--XStream--代码执行&&反序列化 Jackson代码执行 (CVE-2020-8840) 影响范围 2.0.0 <= FasterXM ...
- 软件开发人员 Kubernetes 入门指南|Part 1
Kubernetes 是一个用于部署和管理容器的编排系统.使用 Kubernetes,用户可以通过自动执行管理任务(例如在跨节点间扩展容器并在容器停止时重新启动任务),在不同环境中可靠地运行容器. K ...
- CF1676G
题目简化和分析: 求一颗子树的黑白两数是否相等. 我们设黑 \(1\),白 \(-1\),若某一棵子树的权值为 \(0\),说明此刻的黑白个数相等,贡献加一. 从根搜索,每次将值传递给父亲,判断父亲此 ...
- 【第一章 web入门】afr_3——模板注入与proc文件夹
[第一章 web入门]afr_3--模板注入与proc文件夹 题目来源n1book,buu上的环境 看题 url中提供了name参数,类似在路径中进行了文件名查询然后展示: 随便输入一个数字: 说明肯 ...