📅  最后修改于: 2023-12-03 14:49:44.178000             🧑  作者: Mango
在计算机视觉和图像处理中,找出图像中的几何形状是常见的任务。其中,圆和椭圆是常见的形状之一。本文将介绍如何使用OpenCV在Python中查找图像中的圆和椭圆。
使用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边缘检测阈值等参数。最后通过遍历查找到的圆并在图像中绘制出来。运行后的图像如下所示:
使用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
函数拟合椭圆。最后绘制拟合的椭圆到原图像上。运行后的图像如下所示:
本文介绍了使用OpenCV在Python中查找图像中的圆和椭圆的方法,并给出了相应的实现代码。实际应用中,需要针对具体的任务场景参数进行调整。在此基础上,读者可以自行尝试应用到自己的项目中。