Python+OpenCV实现单个圆形孔和针检测

Python+OpenCV实现单个圆形孔和针检测

OpenCV是一个流行的计算机视觉库,可以用于图像处理和分析。本攻略将介绍如何使用Python和OpenCV实现单个圆形孔和针的检测,并提供两个示例。

步骤一:导入必要的库和模块

我们导入OpenCV库和Py库,以及一些其他必要的库和模块。下面是导入这些库和模块的代码:

import cv2
import numpy as np

步骤二:检测单个圆形孔

我们可以使用OpenCV检测单个圆形孔。下面是一个检测单个圆孔的示例:

# 读取图像
img = cv2.imread('circle_hole.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)

# Canny边缘检测
edges = cv2.Canny(blur, 50, 150)

# Hough圆检测
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)

# 绘制检测到的圆形孔
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("Circle Hole Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,我们首先使用cv2.imread函数读取图像,并使用cv2.cvtColor函数将其转换为灰度图像。然后,我们使用cv2.GaussianBlur函数对图像进行高斯滤波,使用cv2.Canny函数进行边缘检测。接下来,我们使用cv2.HoughCircles函数进行圆检测,并使用cv2.circle函数绘制检测到的圆形孔。最后,我们使用cv2.imshow函数显示结果。

示例一:检测单个圆形孔

下面是一个检测单个圆形孔的完整代码:

import cv2
import numpy as np

# 读取图像
img = cv2.imread('circle_hole.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)

# Canny边缘检测
edges = cv2.Canny(blur, 50, 150)

# Hough圆检测
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)

# 绘制检测到的圆形孔
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("Circle Hole Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中,我们首先使用cv2.imread函数读取图像,并使用cv2.cvtColor函数将其转换为灰度图像。然后,我们使用cv2.GaussianBlur函数对图像进行高斯滤波,使用cv2.Canny函数进行边缘检测。接下来,我们使用cv2.HoughCircles函数进行圆检测,并使用cv2.circle函数绘制检测到的圆形孔。最后,我们使用cv2.imshow函数显示结果。

步骤三:检测单个针

我们可以使用OpenCV检测单个针。下面是一个检测单个针的示例:

# 读取图像
img = cv2.imread('needle.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)

# Canny边缘检测
edges = cv2.Canny(blur, 50, 150)

# Hough线检测
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)

# 绘制检测到的针
if lines is not None:
    for line in lines:
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 0 * (-b))
        y2 = int(y0 - 1000 * (a))
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

# 显示结果
cv2.imshow("Needle Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中我们首先使用cv2.imread函数读取图像,并使用cv2.cvtColor函数将其转换为灰度图像。然后,我们使用cv2.GaussianBlur函数对图像进行高斯滤波,使用cv2.Canny函数进行边缘测。接下来,我们使用cv2.HoughLines函数进行线检测,并使用cv2.line函数绘制检测到的针。最后,我们使用cv2.imshow函数显示结果。

示例二:检测单个针

下面是一个检测单个针的完整代码:

import cv2
import numpy as np

# 读取图像
img = cv2.imread('needle.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)

# Canny边缘检测
edges = cv2.Canny(blur, 50, 150)

# Hough线检测
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)

# 绘制检测到的针
if lines is not None:
    for line in lines:
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + 1000 * (-b))
        y1 = int(y0 + 1000 * (a))
        x2 = int(x0 - 0 * (-b))
        y2 = int(y0 - 1000 * (a))
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

# 显示结果
cv2.imshow("Needle Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的代码中我们首先使用cv2.imread函数读取图像,并使用cv2.cvtColor函数将其转换为灰度图像。然后,我们使用cv2.GaussianBlur函数对图像进行高斯滤波,使用cv2.Canny函数进行边缘测。接下来,我们使用cv2.HoughLines函数进行线检测,并使用cv2.line函数绘制检测到的针。最后,我们使用cv2.imshow函数显示结果。

总结

本攻略介绍了如何使用Python和OpenCV实现单个圆形孔和针的检测,并提供了两个示例。使用cv2.imread函数读取图像,使用cv2.cvtColor函数将其转换为灰度图像,使用cv2.GaussianBlur函数进行高斯滤波,使用cv2.Canny函数进行边缘检测,使用cv2.Houghircles函数进行圆检测,使用cv2.HoughLines函数进行线检测,使用cv2.circle函数和cv2.line函数绘制检到的圆形孔和针。这些操作可以帮助我们在Python实现图像处理和分析。提供了两个示例,分别检测了单个圆形孔和单个针。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+OpenCV实现单个圆形孔和针检测 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 关于Python常用函数中NumPy的使用

    Python常用函数之NumPy库的使用 NumPy库的基本概念 NumPy是Python中一个非常流行的学计算库,提供了许多常用函数和工具。Py的要点是提供高效的多维,可以快速数学运算和数据处理。 安装NumPy库 在使用NumPy库之前需要先安装它。可以使用pip命令来安装NumPy库。在命令行中输入以下命令: pip install numpy 导入N…

    python 2023年5月13日
    00
  • Python中切片的详细操作篇

    Python中切片的详细操作篇 在Python中,切片是一种常用的操作,可以用于获取序列中的一部分。在本攻略中,我们将详细介绍Python中切片的操作,包括切片的基本语法、切片的高级用法、切片的负数索引、切片的步

    python 2023年5月14日
    00
  • 对numpy中二进制格式的数据存储与读取方法详解

    在NumPy中,我们可以使用np.save()和np.load()函数来将数组以二进制格式存储到磁盘上,并从磁盘上读取这些数组。以下是对NumPy中二进制格式的数据存储与读取方法的详细讲解: 将数组以二进制格式存储到磁盘上 我们可以使用np.save()函数将数组以二进制格式存储到磁盘上。以下是一个将数组以二进制格式存储到磁盘上的示例: import num…

    python 2023年5月14日
    00
  • Python networkx中获取图的邻接矩阵方式

    Python NetworkX中获取图的邻接矩阵方式 在本攻略中,我们将介绍如何在Python NetworkX中获取图的邻接矩阵。以下是整个攻略,含两个示例说明。 示例1:获取无向图的邻接矩阵 以下是获取无向图的邻接矩阵的步骤: 导入必要的库。可以使用以下命令导入必要的库: import networkx as nx import numpy as np …

    python 2023年5月14日
    00
  • 十分钟利用Python制作属于你自己的个性logo

    十分钟利用Python制作属于你自己的个性logo Python是一种强大的编程语言,可以用于各种用途,包括制作个性化的logo。本攻略将介绍如何利用Python制作属于你自己的个性logo,包括如何使用turtle模块和如何使用Pillow模块。 使用turtle模块 turtle模块是Python中用于绘制图形的模块,可以用于制作各种类型的图形,包括lo…

    python 2023年5月14日
    00
  • python和anaconda区别以及先后安装的问题详解

    这里介绍一下关于Python和Anaconda的区别以及安装的问题。 Python和Anaconda的区别 Python是一种高级编程语言,可以用来编写各种类型的应用程序,包括网页应用、桌面应用和数据分析程序等。而Anaconda是一个Python发行版,主要的目的是为了简化Python程序开发和数据分析的过程,它包含了许多常用的Python库和工具,如Nu…

    python 2023年5月14日
    00
  • 利用python在excel中画图的实现方法

    利用Python在Excel中画图的实现方法 在数据分析和可视化中,Excel是一个非常常用的工具。Python中有许多库可以用来处理Excel文件,其中包括openpyxl和xlwings。在本攻略中,我们将介绍如何使用这两个库在Excel中绘制图表。 使用openpyxl库 openpyxl是一个用于读写Excel文件的Python库。它可以用来创建、修…

    python 2023年5月14日
    00
  • 使用Python操作Elasticsearch数据索引的教程

    使用Python操作Elasticsearch数据索引的教程 Elasticsearch 是一个开源搜索引擎,可以存储和检索各种类型的数据。Python 作为一种流行的编程语言,支持 Elasticsearch 的 API,可以用它来操作 Elasticsearch 中的数据。本文将介绍如何使用 Python 操作 Elasticsearch 的数据索引。 …

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