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日

相关文章

  • Python实现随机森林RF模型超参数的优化详解

    Python实现随机森林RF模型超参数的优化详解 什么是随机森林? 随机森林(Random Forest,RF)是一种集成学习(Ensemble Learning)方法,通过集成多个决策树来实现分类、回归等任务。随机森林模型在机器学习中应用广泛,被认为是一种性能比较优秀的算法之一。 随机森林的参数 随机森林模型的参数主要包括两类: 决策树参数,如树的深度、每…

    python 2023年6月3日
    00
  • python 使用递归回溯完美解决八皇后的问题

    Python使用递归回溯完美解决八皇后问题 八皇后问题是一个经典的问题,它的目标是在一个8×8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。在本文中,我们将介绍如何使用Python和递归回溯算法来解决八皇后问题。 问题分析 在八皇后问题中,我们需要在一个8×8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击。具体来说,每个皇后不能在同一行、同一列或同一对…

    python 2023年5月14日
    00
  • Python系统监控模块psutil功能与经典用法分析

    Python系统监控模块psutil功能与经典用法分析 简介 Psutil 是一个跨平台的库,可以实现在不同的操作系统(Linux、Windows、MacOS等)下查看CPU、内存、磁盘、网络等系统资源,以及操作进程信息和系统运行状态等。这使得Psutil成为一个重要的系统监控工具,也是很多Python监控和自动化工具必备的模块之一。 安装 在Python环…

    python 2023年5月14日
    00
  • Python 结构化一维序列二

    我们来讲解一下Python结构化一维序列二使用方法的完整攻略。 一. Python结构化一维序列二使用方法 在Python中,一维序列是指只包含一行元素的序列。Python程序可以使用列表(list)、元组(tuple)、集合(set)等数据结构来表示一维序列。 1.1 列表(list) 列表是Python中最常用的数据结构之一。它是一个有序的数据集合,可以…

    python-answer 2023年3月25日
    00
  • 在Python文件中指定Python解释器的方法

    在Python文件中指定Python解释器是通过在文件的第一行添加一个特定的注释行来实现的。这个注释行称为 shebang 或者 hashbang。它告诉操作系统哪个解释器用于运行脚本。下面是详细的攻略: 确认你用的是正确的Python解释器。同一台机器上可能安装了多个版本的Python解释器,所以必须确认使用正确版本的Python解释器。可以通过在命令行输…

    python 2023年5月30日
    00
  • python 以16进制打印输出的方法

    Python可以使用字符串的格式化方法将数字以十六进制表示输出。下面是Python的两种打印十六进制的方法: 方法一:使用format()函数 可以使用字符串的format()方法来将整数转换成十六进制字符串,然后打印输出。此外,还可以配合print函数中占位符使用。 例如,要打印十进制数的十六进制值,可以使用如下代码: num = 2112 print(&…

    python 2023年6月5日
    00
  • Python编程itertools模块处理可迭代集合相关函数

    Python编程中的itertools模块是一个处理可迭代集合的库,提供了各种函数可以方便地对可迭代集合进行处理。下面将介绍一些itertools模块中处理可迭代集合相关函数的使用攻略。 1. itertools.cycle函数 itertools.cycle函数通过让可迭代的seq无限循环来创建一个迭代器。示例代码如下: import itertools …

    python 2023年6月3日
    00
  • 无法在 Fedora 中安装 python-devel 包

    【问题标题】:unable to install python-devel package in fedora无法在 Fedora 中安装 python-devel 包 【发布时间】:2023-04-05 05:08:01 【问题描述】: 我试图使用 pip 安装 psycopg 并遇到此错误 在 psycopg/psycopgmodule.c:27:0 中…

    Python开发 2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部