Python OpenCV椭圆-最多接受5个参数(给定8个)

toiithl6  于 2022-12-13  发布在  Python
关注(0)|答案(5)|浏览(319)

在看完文档后,我完全不明白为什么我不能用OpenCV绘制椭圆。
首先我使用CV 2.4.9

>>> cv2.__version__
'2.4.9'
>>>

其次,我尝试使用以下代码:

>>> help(cv2.ellipse)
Help on built-in function ellipse in module cv2:

ellipse(...)
    ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[,
lineType[, shift]]]) -> None  or  ellipse(img, box, color[, thickness[, lineType
]]) -> None

我的椭圆如下所示:

cx,cy = 201,113
ax1,ax2 =  37,27
angle = -108
center = (cx,cy)
axes = (ax1,ax2)

cv2.ellipse(frame, center, axes, angle, 0 , 360, (255,0,0), 2)

但是,运行该程序会得到以下结果

>>> cv2.ellipse(frame,center,axes,angle,0,360, (255,0,0), 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ellipse() takes at most 5 arguments (8 given)
>>>

帮忙?
编辑:
我想用下面的内容作为框架

cap = cv2.VideoCapture(fileLoc)
frame = cap.read()

显然,可以通过使用以下代码修复此问题

pil_im = Image.fromarray(frame)
cv2.ellipse(frame,center,axes,angle,0,360,(255,0,0), 2)
pil_im = Image.fromarray(raw_image)
pil_im.save('C:/Development/export/foo.jpg', 'JPEG')
63lcw9qa

63lcw9qa1#

我有同样的问题,我解决了它。我的第一行代码,我不能运行它是:

cv2.ellipse(ellipMask, (113.9, 155.7), (23.2, 15.2), 0.0, 0.0, 360.0, (255, 255, 255), -1);

我发现轴(以及中心)必须是一个整数元组,而不是浮点数。因此下面的行是确定的!

cv2.ellipse(ellipMask, (113, 155), (23, 15), 0.0, 0.0, 360.0, (255, 255, 255), -1);

我认为你应该采取其他值的是正确的格式。
以下是OpenCV网站的链接:http://answers.opencv.org/question/30778/how-to-draw-ellipse-with-first-python-function/

oyjwcjzk

oyjwcjzk2#

下面是我的iPython会话-它看起来工作得很好:

In [54]: cv2.__version__
Out[54]: '2.4.9'

In [55]: frame = np.ones((400,400,3))

In [56]: cx,cy = 201,113

In [57]: ax1,ax2 =  37,27

In [58]: angle = -108

In [59]: center = (cx,cy)

In [60]: axes = (ax1,ax2)

In [61]: cv2.ellipse(frame, center, axes, angle, 0 , 360, (255,0,0), 2)

In [62]: plt.imshow(frame)
Out[62]: <matplotlib.image.AxesImage at 0x1134ad8d0>

这一做法奏效了,并产生了以下结果:

所以,有点奇怪......也许有什么东西在你导入cv2模块的方式?
或者(更有可能)frame对象的类型/结构是什么?

frebpwbc

frebpwbc3#

实际上,如果从0°到360°绘图,可以使用浮点数,方法是使用单个椭圆参数调用函数:

ellipse_float = ((113.9, 155.7), (23.2, 15.2), 0.0)
cv2.ellipse(image, ellipse_float, (255, 255, 255), -1);

或在一行程序中:

cv2.ellipse(image, ((113.9, 155.7), (23.2, 15.2), 0.0), (255, 255, 255), -1);
# compared to the following which does not work if not grouping the ellipse paramters in a tuple
#cv2.ellipse(image, (113.9, 155.7), (23.2, 15.2), 0.0, 0, 360, (255, 255, 255), -1); # cryptic error

如果您想添加startAngle和stopAngle,这是行不通的。

cl25kdpy

cl25kdpy4#

(h, w) = image.shape[:2]
        (cX, cY) = (int(w * 0.5), int(h * 0.5))

        # divide the image into four rectangles/segments (top-left,
        # top-right, bottom-right, bottom-left)
        segments = [(0, cX, 0, cY), (cX, w, 0, cY),
                    (cX, w, cY, h), (0, cX, cY, h)]

        # construct an elliptical mask representing the center of the
        # image
        (axesX, axesY) = (int(w * 0.75) / 2, int(h * 0.75) / 2)
        ellipMask = np.zeros(image.shape[:2], dtype="uint8")
        cv2.ellipse(ellipMask, (int(cX), int(cY)), (int(axesX), int(axesY)), 0, 0, 360, 255, -1)

对我有用

zzzyeukh

zzzyeukh5#

只尝试打印输入参数,并检查它们的形状、格式和dtype是否与OpenCV文档相同。在发现其中一个参数有问题后,为我修复了这个问题。

相关问题