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