从Open CV Python中获取cv2.contour中的x和y坐标,并将其存储到不同的变量中

时间:2018-06-10 12:19:46

标签: python python-3.x opencv contour opencv-contour

我从cv2.findContours打印轮廓。它打印出类似这样的东西:     [[370 269]] 我想要的是获得370并将其存储到变量中。

import cv2
import numpy as np
cap = cv2.VideoCapture(0)

while True:
    _, frame = cap.read()


    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    lower = np.array([0,0,255]) 
    upper = np.array([255,255,255])

    imgThreshHigh = cv2.inRange(hsv, lower, upper)
    thresh = imgThreshHigh.copy()

    _,contours,_ = cv2.findContours(thresh, 
                cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

    print(contours)

    cv2.imshow('frame',frame)
    cv2.imshow('Object',thresh)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
cv2.destroyAllWindows()

5 个答案:

答案 0 :(得分:0)

你知道解构吗?

data = [370, 269]
x, y = data

print(x)
# 370

print(y)
#269

或者,如果数据是列表列表:

data = [[370, 269]]
[[x, y]] = data

print(x)
# 370

print(y)
#269

答案 1 :(得分:0)

我计算了以下内容,用于存储单个轮廓的所有xy坐标:

x = []
y = []
for k in contours:
    for i in k:
        for j in i:
            x.append(j[0])
            y.append(j[1])

我相信一定有更快的方法!!

答案 2 :(得分:0)

kx = contours[k][:,0,0]
ky = contours[k][:,0,1]

答案 3 :(得分:0)

这可能对您来说太迟了,我想它将对某人有所帮助。 为了获得轮廓的x,y值,我使用了

for contour in contours:
    x, y, _, _ = cv2.boundingRect(contour)
    print(x, " ", y)

这将获取轮廓起点的x,y坐标。 两个下划线是宽度和高度,由于我们不需要它们,因此将其忽略。

答案 4 :(得分:0)

这是我编写的将坐标写入嵌套列表的函数。该列表包含与轮廓一样多的列表。每个单独的列表都包含一个轮廓的 XY 坐标列表。

def get_xy_list_from_contour(contours):
    full_dastaset = []
    for contour in contours:
        xy_list=[]
        for position in contour:
            [[x,y]] = position
            xy_list.append([x,y])
        full_dastaset.append(xy_list)
    return full_dastaset