根据Bresenham 画线算法,正好有
max(abs(p1.x - p2.x), abs(p1.y - p2.y)) - 1
点p1
和之间p2
的像素(不计算像素p1
或p2
)。
这条线是一条 1 像素的粗线。
请注意,像素数不对应于点之间的欧几里得距离,而是对应于 L 无穷大距离,也称为最大范数、棋盘距离或切比雪夫距离。
编辑:更新的问题完全不同。以上将是上限。
要计算两点之间线上的实际白色像素数,您需要绘制该线。上面的维基百科链接给出了详细的算法来画线。这是在 MATLAB 中的一个非常简单的实现,应该很容易转换为 Python。虽然不是实际绘制线条,而是读取像素值,并计算白色的值。
@Ben Jones 提出了 Bresenham 算法的 Python 实现。没必要那么复杂。这是一个简单的 Python 脚本,它在两点之间的直线上查找所有像素(从上面链接的 MATLAB 版本翻译):
p1 = np.array([0,0])
p2 = np.array([7,4]) % Two example points.
p = p1
d = p2-p1
N = np.max(np.abs(d))
s = d/N
print(np.rint(p).astype('int'))
for ii in range(0,N):
p = p+s;
print(np.rint(p).astype('int'))
这会产生输出:
[0 0]
[1 1]
[2 1]
[3 2]
[4 2]
[5 3]
[6 3]
[7 4]
现在剩下的就是读取这些坐标处的像素值,并确定它们是否为白色。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句