私はこのバイナリイメージを持っています:
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ポイントごとに1つのポイントを選択するだけなので、近くの2つのポイント間の距離は同じではありません。ただし、いくつかの内挿法を使用してパスを滑らかな曲線に変換し、等距離点を見つけることができます。