python+opencv识别图片中的圆形

Python+OpenCV识别图片中的圆形

本文讲解如何使用Python和OpenCV库对图片中的圆形进行识别和定位。

准备工作

在开始编写代码前,需要先安装Python和OpenCV库:

# 安装Python
sudo apt-get install python

# 安装OpenCV库
pip install opencv-python

加载图片

在OpenCV中,我们可以使用cv2.imread()方法加载图片:

import cv2

img = cv2.imread("test.jpg")

预处理图片

在进行圆形识别前,我们需要对图片进行预处理,以便提高识别的准确率。预处理通常包括以下几个步骤:

  • 灰度化
  • 中值滤波
  • 二值化
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 中值滤波
gray = cv2.medianBlur(gray, 5)

# 二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

检测圆形

在进行圆形检测前,需要使用cv2.HoughCircles()方法设置圆形检测参数:

# 设置圆形检测参数
circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)

# 绘制圆形
if circles is not None:
    circles = np.round(circles[0, :]).astype("int")

    for (x, y, r) in circles:
        cv2.circle(img, (x, y), r, (0, 255, 0), 2)

示例1

import cv2
import numpy as np

img = cv2.imread("test.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)

if circles is not None:
    circles = np.round(circles[0, :]).astype("int")

    for (x, y, r) in circles:
        cv2.circle(img, (x, y), r, (0, 255, 0), 2)

cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例2

import cv2
import numpy as np

img = cv2.imread("test2.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)

if circles is not None:
    circles = np.round(circles[0, :]).astype("int")

    for (x, y, r) in circles:
        cv2.circle(img, (x, y), r, (0, 255, 0), 2)

cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述示例代码中,test.jpgtest2.png是两张待识别的图片,可以根据实际需要进行更改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+opencv识别图片中的圆形 - Python技术站

(1)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 如何基于线程池提升request模块效率

    使用线程池可以提升request模块的效率,因为线程池可以重复利用线程,避免了线程创建和销毁的开销,同时也可以避免线程数量过多导致的资源浪费和系统负载过高的问题。下面是基于线程池提升request模块效率的完整攻略,包含两个示例。 1. 使用ThreadPoolExecutor实现线程池 Python标准库中提供了concurrent.futures模块,其…

    python 2023年5月15日
    00
  • Python webargs 模块的简单使用

    以下是“Python webargs 模块的简单使用”的完整攻略: 一、问题描述 在Python的Web开发中,我们经常需要处理HTTP请求参数。webargs是一个Python库,它提供了一种简单的方式来解析和验证HTTP请求参数。本文将详细讲解webargs模块的简单使用。 二、解决方案 2.1 安装webargs模块 在使用webargs模块之前,我们…

    python 2023年5月14日
    00
  • 浅析Python中的元编程

    浅析Python中的元编程 元编程是指编写能够修改程序自身状态或者行为的程序。在Python中,元编程通常是通过对元类、装饰器、反射等一系列高级特性的运用来实现的。 元类 元类是Python中最为高级的编程特性之一,它允许我们在定义类时动态地定制类的行为。通过定义自己的元类,我们可以改变类的实例化行为,修改类属性和方法等。在Python中,通过定义一个类的_…

    python 2023年5月30日
    00
  • python实现计算器简易版

    下面我会给出详细的Python实现计算器简易版的攻略,整个实现过程分为以下几步: 1. 设计算式输入 首先,我们需要设计一个计算器输入框,让用户输入要进行计算的算式。这里我们可以使用Python的input函数来实现。 formula = input("请输入要计算的算式:") 这里,我们使用input函数接收用户输入的算式,并将其保存在…

    python 2023年6月3日
    00
  • python数字图像处理之高级滤波代码详解

    标题:Python数字图像处理之高级滤波代码详解 目录 介绍 准备工作 代码详解 示例一:使用中值滤波器对图像进行噪声处理 示例二:使用高斯滤波器对图像进行模糊处理 总结 介绍 数字图像处理是计算机视觉领域中的重要研究方向之一。其中图像滤波是数字图像处理的重要组成部分之一。本文将详细介绍 Python 中高级滤波的相关代码,包括中值滤波器、高斯滤波器等,并通…

    python 2023年5月20日
    00
  • Python import自己的模块报错问题及解决

    下面是详细的“Python import自己的模块报错问题及解决”教程: 问题描述 在Python开发过程中,我们经常会写一些模块或者包,而在模块和包的导入过程中,有可能会遇到自己模块导入报错的问题,这是很常见的一种错误。这种错误通常表现为: ImportError: cannot import name ‘xxx’ from ‘yyy’ 其中,“xxx”代…

    python 2023年5月13日
    00
  • wxPython色环电阻计算器

    下面我将分享“wxPython色环电阻计算器”的完整攻略。本文将包含以下章节: 软件介绍 使用步骤 实例说明 注意事项 软件介绍 “wxPython色环电阻计算器”是一款基于 wxPython 开发的工具,它可以根据电阻器上的色环计算出电阻器的电阻值。该工具的主要特点如下: 界面简洁清晰,易于使用。 支持4色环、5色环两种计算方式。 提供详细的计算结果和颜色…

    python 2023年6月13日
    00
  • python元组拆包实现方法

    当我们需要同时处理多个值时,通常可以使用Python的元组类型。元组是不可变的有序序列,可以存储各种类型的数据。Python元组拆包是一种将元组中的元素分配给多个变量的快捷方式,这样我们可以很方便地进行多个变量赋值。下面是Python元组拆包实现方法的详细攻略。 实现方法 Python元组拆包实现方法主要有以下几种: 多变量赋值:将元组中的元素赋值给多个变量…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部