import cv2
import numpy as np
o=cv2.imread('C:/Users/xpp/Desktop/coins.png')#原始图像
gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
ret,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
contours,hierarchy=cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓
n=len(contours)
contoursImg=[]
for i in range(n):
temp=np.zeros(o.shape,np.uint8)
contoursImg.append(temp)
cv2.imshow("original",o)
ellipse=cv2.fitEllipse(contours[i])#计算最优拟合椭圆框
print("返回值ellipse:\n",ellipse)
cv2.ellipse(o,ellipse,(255,255,255),2)#绘制最优拟合椭圆框
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()
返回值ellipse: ((226.83999633789062, 62.23775100708008), (103.79611206054688, 110.34321594238281), 80.08370208740234
算法:最优拟合椭圆框是计算包围指定轮廓点集的最小外接矩形的中心的坐标、矩形长和宽、旋转角度,与椭圆的中心的坐标、椭圆的长轴和短轴、旋转角度相对应。
retval=cv2.fitEllipse(points)
img=cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType]])
注意:最优拟合椭圆框通过最小外接矩形得到椭圆,不是直接得到椭圆。矩形是最小外接矩形而不是矩形包围框和最小矩形包围框。通常情况下,椭圆的短轴是长轴的一半长。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!