1

我有这个二进制图像:

图像

作为 0 和 1 值的 numpy 数组。

我想在路径上每隔 10 个像素对其进行采样,例如:

图像

我知道如何通过对数组进行切片来对正交对象进行采样,但我不知道如何处理不规则形状,并获得均匀分布的“点”集。

4

1 回答 1

2

您可以使用 OpenCV 通过findContours. 这是演示代码,x&y是路径上像素的坐标。

import numpy as np
import cv2
import pylab as pl
img = cv2.imread("img.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,img = cv2.threshold(img,127,255,0)
r = cv2.findContours(255-img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
c = r[0][0]
x, y = cc[::10, 0, 0], cc[::10, 0, 1]
pl.figure(figsize=(10, 10))
pl.imshow(img, cmap="gray", interpolation="nearest")
pl.plot(cc[::10, 0, 0], cc[::10, 0, 1], "o")

这是输出:

在此处输入图像描述

我只是从路径中每10个点选择一个点,所以附近两个点之间的距离是不一样的。但是您可以使用一些插值方法将路径转换为平滑曲线,然后找到等距点。

于 2013-03-02T13:28:45.557 回答