OpenCv Circle reshape()和语法的基础是什么?

时间:2019-04-09 06:50:09

标签: python opencv

我只是编写了此简单的代码来跟踪圈子,根本没有对其进行调整,因此我想在继续之前修复错误。它说:

ValueError:无法将大小为6的数组重塑为形状(3,)

我尝试过在线查找,但是我头疼。有人可以指出我正确的方向吗?

import cv2
import numpy as np


cap = cv2.VideoCapture(0)
def circle_image(image, circles):
    image_circles = np.zeros_like(image)
    if circles is not None:
        for circle in circles:
            rad, x1, y1 = circle.reshape(3)
            cv2.circle(image_circles,(x1,y1),rad,(255,0,0), 10)
    return  image_circles

while cap.isOpened():
    ret, frame = cap.read()
    if ret == True:
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        blur_frame = cv2.GaussianBlur(gray_frame, (5, 5), 0)
        canny_frame = cv2.Canny(blur_frame, 100, 100)
        tires = cv2.HoughCircles(canny_frame,cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0)

        circles_to_blend = circle_image(canny_frame, tires)
        combo_image = cv2.addWeighted(canny_frame, 0.8, circles_to_blend, 1, 1)

        cv2.imshow('frame', combo_image)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:3)

我实际上必须在python中测试HoughCircles才能理解问题。我不知道为什么,但是HoughCircles函数在python中返回一个圈子列表。所以你想做

for circle in circles[0,:]:

使其正常工作。但是,在文档中您可以清楚地看到这是错误的:

rad, x1, y1 = circle.reshape(3)

圆应为x,y,rad,并且您也不需要重塑形状。在某些情况下,它可能是4个值(投票),并且此行将失败,因为4个值无法重塑为3,但是您可以执行以下操作:

x1, y1, rad = circle[:3] # this takes the first 3 numbers

我认为在完成这些更改后,您的代码应该可以使用。