如何使用for循环制作一个二维列表?

问题描述 投票:0回答:1

我想从加载的图像中检测出圆,并将中心值保存到一个数组中,我尝试了不同的方法,包括使用for循环、append、numpy、list,但目前还没有成功。

def slot_make_pixmap(self, img, param1=10, param2=10, minRadius=0, maxRadius=0):
    self.img = img
    circle_centers = []
    center = []
    dst = img.copy()
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param1=param1, param2=param2, minRadius=minRadius, maxRadius=maxRadius)
    # print('circles: ', circles[0])
    for i in range(circles.size):
        center.append([circles[i][0], circles[i][1]])
        circle_centers.append(center)
        print('circle centers2: ', circle_centers[i])
    try:
        for i in circles[0]:
            cv2.circle(dst, (i[0], i[1]), i[2], (0, 255, 0), 5)
            print('circle centers: ', (i[0],i[1]))
            # circle_centers[i] = [i[0],i[1]]
    except Exception as ex:
        print(ex)
        pass
Traceback (most recent call last):
File "D:\Python\Projects\Sensor\widget_result_camera.py", line 32, in slot_make_pixmap
    center.append([circles[i][0], circles[i][1]])
IndexError: index 1 is out of bounds for axis 0 with size 1

我试过的方法是使用for循环

        circle_centers = []
        for i in range(circles.size):
            center = []
            center.append([circles[i][0], circles[i][1]])
            circle_centers.append(center)
            print('circle centers2: ', circle_centers[i])

任何帮助将是非常感激的。谢谢你的帮助

python list opencv
1个回答
0
投票

像下面这样使用。

circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param1=param1, param2=param2, minRadius=minRadius, maxRadius=maxRadius)
centers = []
if circles is not None:
    circles = np.round(circles[0, :]).astype("int")
    for (x, y, r) in circles:
        cv2.circle(orig, (x, y), r, (0, 255, 0), 2)
        centers.append((x, y))
print(centers)
© www.soinside.com 2019 - 2024. All rights reserved.