【发布时间】:2020-02-20 22:25:33
【问题描述】:
我正在尝试从此图像中裁剪一个居中(或不居中)的圆圈:
我从有关堆栈溢出主题的现有问题中窃取了这段代码,但是出了点问题:
import cv2
file = 'dog.png'
img = cv2.imread(file)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
circle = cv2.HoughCircles(img,
3,
dp=1.5,
minDist=10,
minRadius=1,
maxRadius=10)
x = circle[0][0][0]
y = circle[0][0][1]
r = circle[0][0][2]
rectX = (x - r)
rectY = (y - r)
crop_img = img[rectY:(rectY+2*r), rectX:(rectX+2*r)]
cv2.imwrite('dog_circle.png', crop_img)
输出:
Traceback (most recent call last):
File "C:\Users\Artur\Desktop\crop_circle - Kopie\crop_circle.py", line 14, in <module>
x = circle[0][0][0]
TypeError: 'NoneType' object is not subscriptable
cv2.HoughCircles() 似乎产生 None 而不是裁剪圆数组。我该如何解决这个问题?
【问题讨论】:
-
HoughCircles用于检测图像上的圆圈,而不是裁剪它。 -
你不能有圆形图像。图像始终为矩形,但某些像素可以是透明的(
RGBA中的 alpha 通道)并且系统不会显示它。因此,您可以裁剪矩形并添加带有应该可见像素信息的 alpha 通道 - 在这里您可以使用来自答案的圆形蒙版。而且你必须保存为 png 或 tiff 因为 jpg 不能保留 alpha 通道。
标签: python image opencv image-processing crop