2013-03-02 126 views
1

样本阵列我有这样的二值化图像:沿路径

img

为0和1的值numpy的阵列。

我想品尝它沿路径每10个像素,如:

img

我知道怎么样正交对象,通过切片阵列,但我不知道该怎么办形状不规则,并获得均匀分布的“点”集。

+0

您需要先参数化路径。 – tacaswell 2013-03-02 06:03:26

+0

如果这是唯一的方法,这将是矫枉过正,因为上面的图像太简化了 – theta 2013-03-02 06:09:03

回答

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") 

这里是输出:

enter image description here

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

+0

谢谢,作品精美!我用ndimage label/find_object函数尝试自己,然后通过三角测量,但从未到达那里。 – theta 2013-03-02 22:37:26