📜  使用 OpenCV 查找图像中的圆和椭圆Python(1)

📅  最后修改于: 2023-12-03 14:49:44.178000             🧑  作者: Mango

使用 OpenCV 查找图像中的圆和椭圆

在计算机视觉和图像处理中,找出图像中的几何形状是常见的任务。其中,圆和椭圆是常见的形状之一。本文将介绍如何使用OpenCV在Python中查找图像中的圆和椭圆。

安装 OpenCV

使用OpenCV前,需要先安装OpenCV库。安装OpenCV的方法有很多,我们这里介绍使用pip安装:

$ pip install opencv-python
导入库

在Python中使用OpenCV需要导入cv2库:

import cv2
查找圆

使用OpenCV查找图像中的圆需要用到cv2.HoughCircles函数。下面是一个查找圆并在图像上绘制出圆的例子:

import cv2
import numpy as np

img = cv2.imread('circles.png', 0)
img = cv2.medianBlur(img, 5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:
    # draw the outer circle
    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们首先读取了一张图像,并将其转换为灰度图像。然后使用cv2.medianBlur函数进行中值滤波以去除图像中的噪声。接着使用cv2.HoughCircles函数查找圆,函数需要传入图像、检测方法、累加器分辨率、两个Canny边缘检测阈值等参数。最后通过遍历查找到的圆并在图像中绘制出来。运行后的图像如下所示:

Circle Detection Result

查找椭圆

使用OpenCV查找图像中的椭圆需要用到cv2.fitEllipse函数。下面是一个查找椭圆并在图像上绘制出椭圆的例子:

import cv2
import numpy as np

img = cv2.imread('ellipses.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)

contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):
    if contours[i].shape[0] > 5:
        ellipse = cv2.fitEllipse(contours[i])
        cv2.ellipse(img, ellipse, (0, 255, 0), 2)

cv2.imshow('detected ellipses', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们首先读取了一张图像。我们将图像转换为灰度图像,并使用Canny边缘检测算法提取边缘。然后使用cv2.findContours函数查找边缘,函数需要传入图像、轮廓检索模式和轮廓逼近方法等参数。接着遍历查找到的轮廓,并使用cv2.fitEllipse函数拟合椭圆。最后绘制拟合的椭圆到原图像上。运行后的图像如下所示:

Ellipse Detection Result

结语

本文介绍了使用OpenCV在Python中查找图像中的圆和椭圆的方法,并给出了相应的实现代码。实际应用中,需要针对具体的任务场景参数进行调整。在此基础上,读者可以自行尝试应用到自己的项目中。