Python + OpenCV = 如何裁剪圆圈?

Posted

技术标签:

【中文标题】Python + OpenCV = 如何裁剪圆圈?【英文标题】:Python + OpenCV = How to crop circle? 【发布时间】:2015-07-20 14:31:48 【问题描述】:

下面是代码:

self.img = cv2.imread(image,)
circle = cv2.HoughCircles(self.img, 3,
                          dp=1.5, minDist=1000, minRadius=100, maxRadius=1000)
red = (0,0,255)
x = circle[0][0][0]
y = circle[0][0][1]
r = circle[0][0][2]
cv2.circle(self.img, (x, y), r, red, 2)



    x - X
    y - Y
    r - Radius
    For example: 521.25, 506.25, 318.919

从代码中如何裁剪给定示例中的圆圈?

【问题讨论】:

您使用的是什么版本的 OpenCV? OpenCV 版本:3.0.0 如果您的图像是一个矩形网格,那么您可以使用像cropped = image[30:120 , 240:335] 这样的线对其进行裁剪,其中数字是定义图像矩形区域的 NumPy 数组切片,从 (240, 30 ) 并在 (335, 120) 处结束。如果您想要针对您的问题的特定答案,请根据How to Ask 重写。 如果你能提供一些图片,这个问题会更有用。 【参考方案1】:

它很简单..您需要获取矩形右上角的 x,y 坐标并找到 with 和 height。圆只能用正方形包围。

# given x,y are circle center and r is radius
rectX = (x - r) 
rectY = (y - r)
crop_img = self.img[y:(y+2*r), x:(x+2*r)]

【讨论】:

据我测试,您必须在最后一个公式中使用 rectX 和 rectY,而不是 x 和 y 正如@Maham 所说,rectXrectY 应该在最终公式中使用,否则它不起作用【参考方案2】:

在 circles=cv2.HoughCircles(img,...) 之后

if len(circles) == 1:
    x, y, r = circles[0][0]
    print x, y, r
    mask = np.zeros((w0,h0),dtype=np.uint8)
    cv2.circle(mask,(x,y),r,(255,255,255),-1,8,0)
    #cv2.imwrite(argv[2],mask)
    out = img*mask
    white = 255-mask
    cv2.imwrite(argv[2],out+white)

【讨论】:

你从哪里得到 w0 和 h0? w0 和 h0 = 图像(和蒙版)的宽度和高度,w0 = img.shape[0]; h0 = img.shape[1];

以上是关于Python + OpenCV = 如何裁剪圆圈?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python opencv中简单地裁剪边界框[重复]

如何使用 python opencv 裁剪图像中最大的对象?

如何使用 Python 和 OpenCV 裁剪图像中的多个 ROI

minAreaRect OpenCV [Python] 返回的裁剪矩形

Opencv和python用于自动裁剪

使用Python从OpenCV中扫描裁剪矩形照片