百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

计算机视觉,opencv 圆形检测

ztj100 2024-11-21 00:30 20 浏览 0 评论

今天我们介绍一个opencv 函数cv2.HoughCircles(),此函数主要用于检测图像中的圆形,我们知道3点可以画一个圆,学习CAD的同学肯定知道,opencv使用霍夫梯度的方法进行圆的检测

首先对图像进行canny边缘检测,对边缘中的每一个非0点,通过Sobel算法计算局部梯度。那么计算得到的梯度方向,实际上就是圆切线的法线。三条法线即可确定一个圆心,同理在累加器中对圆心通过的法线进行累加,就得到了圆环的判定。

cv2.HoughCircles函数:

cv2.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

1:image为输入图像,需要灰度图

2:method为检测方法:CV_HOUGH_GRADIENT

3:dp为检测内侧圆心的累加器图像的分辨率于输入图像之比的倒数,

如dp=1,累加器和输入图像具有相同的分辨率

如果dp=2,累计器便有输入图像一半的分辨率

4:minDist表示两个圆之间圆心的最小距离

5:param1默认值100,它是method设置的检测方法的对应的参数,

当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,

它表示传递给canny边缘检测算子的高阈值,而低阈值为高阈值的一半

6:param2默认值100,它是method设置的检测方法的对应的参数,

当前唯一的方法霍夫梯度法cv2.HOUGH_GRADIENT,

它表示在检测阶段圆心的累加器阈值,它越小,就越可以检测到更多根本不存在的圆,

而它越大的话,能通过检测的圆就更加接近完美的圆形了

7:minRadius默认值0,圆半径的最小值

8:maxRadius默认值0,圆半径的最大值

圆形检测的代码实现

import numpy as np

import cv2

image = cv2.imread("123.jpg")

output = image.copy()

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)

if circles is not None:

circles = np.round(circles[0, :]).astype("int")

for (x, y, r) in circles:

cv2.circle(output, (x, y), r, (0, 255, 0), 4)

cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)

break

cv2.imshow("output", np.hstack([image, output]))

cv2.waitKey(0)

首先我们导入一张图片,这里需要主要一下要转到灰度空间

然后使用circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 100)函数对图片中的圆形进行检测,这里小编只显示了一个圆形,直接使用break函数 ,跳出for循环,因为里面检测到了很多无用的圆形,这里需要大家去优化函数中的各个参数,以便达到自己图片检测的目的

待图片检测完成后,使用cv2.circle(output, (x, y), r, (0, 255, 0), 4)函数,把检测到的图片中的圆形画出来,以便显示

当然,此函数都可以检测多了圆形,删除代码中的break,函数便会显示所有的圆形,再次运行代码,便可以看到检测到的多 个圆形

这在计算机视觉应用中特别广泛,特别是工业自动化过程中,计算机视觉尤其重要,当然若想得到更精确的视觉检测,自己也可以进行神经网络的搭建与训练

相关推荐

利用navicat将postgresql转为mysql

导航"拿来主义"吃得亏自己动手,丰衣足食...

Navicat的详细教程「偷偷收藏」(navicatlite)

Navicat是一套快速、可靠并价格适宜的数据库管理工具,适用于三种平台:Windows、macOS及Linux。可以用来对本机或远程的MySQL、SQLServer、SQLite、...

Linux系统安装SQL Server数据库(linux安装数据库命令)

一、官方说明...

Navicat推出免费数据库管理软件Premium Lite

IT之家6月26日消息,Navicat推出一款免费的数据库管理开发工具——NavicatPremiumLite,针对入门级用户,支持基础的数据库管理和协同合作功能。▲Navicat...

Docker安装部署Oracle/Sql Server

一、Docker安装Oracle12cOracle简介...

Docker安装MS SQL Server并使用Navicat远程连接

...

Web性能的计算方式与优化方案(二)

通过前面《...

网络入侵检测系统之Suricata(十四)——匹配流程

其实规则的匹配流程和加载流程是强相关的,你如何组织规则那么就会采用该种数据结构去匹配,例如你用radixtree组织海量ip规则,那么匹配的时候也是采用bittest确定前缀节点,然后逐一左右子树...

使用deepseek写一个图片转换代码(deepnode处理图片)

写一个photoshop代码,要求:可以将文件夹里面的图片都处理成CMYK模式。软件版本:photoshop2022,然后生成的代码如下://Photoshop2022CMYK批量转换专业版脚...

AI助力AUTOCAD,生成LSP插件(ai里面cad插件怎么使用)

以下是用AI生成的,用AUTOLISP语言编写的cad插件,分享给大家:一、将单线偏移为双线;;;;;;;;;;;;;;;;;;;;;;单线变双线...

Core Audio音频基础概述(core 音乐)

1、CoreAudioCoreAudio提供了数字音频服务为iOS与OSX,它提供了一系列框架去处理音频....

BlazorUI 组件库——反馈与弹层 (1)

组件是前端的基础。组件库也是前端框架的核心中的重点。组件库中有一个重要的板块:反馈与弹层!反馈与弹层在组件形态上,与Button、Input类等嵌入界面的组件有所不同,通常以层的形式出现。本篇文章...

怎样创建一个Xcode插件(xcode如何新建一个main.c)

译者:@yohunl译者注:原文使用的是xcode6.3.2,我翻译的时候,使用的是xcode7.2.1,经过验证,本部分中说的依然是有效的.在文中你可以学习到一系列的技能,非常值得一看.这些技能不单...

让SSL/TLS协议流行起来:深度解读SSL/TLS实现1

一前言SSL/TLS协议是网络安全通信的重要基石,本系列将简单介绍SSL/TLS协议,主要关注SSL/TLS协议的安全性,特别是SSL规范的正确实现。本系列的文章大体分为3个部分:SSL/TLS协...

社交软件开发6-客户端开发-ios端开发验证登陆部分

欢迎订阅我的头条号:一点热上一节说到,Android客户端的开发,主要是编写了,如何使用Androidstudio如何创建一个Android项目,已经使用gradle来加载第三方库,并且使用了异步...

取消回复欢迎 发表评论: