我从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()
答案 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)
我计算了以下内容,用于存储单个轮廓的所有x
和y
坐标:
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