我有这个二进制图像:
作为 0 和 1 值的 numpy 数组。
我想在路径上每隔 10 个像素对其进行采样,例如:
我知道如何通过对数组进行切片来对正交对象进行采样,但我不知道如何处理不规则形状,并获得均匀分布的“点”集。
我有这个二进制图像:
作为 0 和 1 值的 numpy 数组。
我想在路径上每隔 10 个像素对其进行采样,例如:
我知道如何通过对数组进行切片来对正交对象进行采样,但我不知道如何处理不规则形状,并获得均匀分布的“点”集。
您可以使用 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个点选择一个点,所以附近两个点之间的距离是不一样的。但是您可以使用一些插值方法将路径转换为平滑曲线,然后找到等距点。