我有一张简单的白色曼荼罗的图片。我使用Python、cv 2和numpy。我的目标是得到轮廓的X,Y坐标,并将它们保存在一个gcode文件中。问题是,我得到的轮廓是几个不同长度的数组。像这样:[array([179, 50, ...... 131, 85], dtype=int32), array(...), array(...).](https://i.stack.imgur.com/U1vPI.png)作为输出,我想要这样的东西:np.array points[X][Y]。
我的代码得到的轮廓:
img = cv2.imread(image_path,0)
assert img is not None, "file could not be read, check with os.path.exists()"
ret, thresh = cv2.threshold(img, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
字符串
首先我用这个来保存点:
points = []
for contour in contours:
points.extend(contour)
return points
型
但我希望他们在np数组中正确保存,并可以将其转换为一个干净的csv文件,我尝试了这样的smth:
maxlength = max(len(contour) for contour in contours)
cnts = []
for contour in contours:
padded_contour = np.pad(contour, ((0, maxlength - len(contour)), (0, 0)), mode='constant')
cnts.append(padded_contour)
cnts_array = np.array(cnts)
型
但是这给了我这个错误:“ValueError:operations could not be broadcast with remapped shape [original->remapped]:(2,2)and requested shape(3,2)”(值错误:操作数不能与重新Map的形状[original-> remapped]:(2,2)和请求的形状(3,2)一起广播)。
我有点困惑,因为这应该是一个问题,很多人谁是使用cv 2应该有,我找不到一个解决方案。
谢谢
编辑使用此功能可以正常工作,但会在图片中出现一些奇怪的线条:
all_points = []
for contour in contours:
for point in contour:
x, y = point[0] # Extract x and y coordinates from the contour
all_points.append([x, y])
# Convert the list of points to a NumPy array
contours_array = all_points # np.array(all_points)
return contours_array
型
输出如下:Strange lines in picture
1条答案
按热度按时间klr1opcd1#
字符串