我正在尝试构建一个功能,该功能从特定坐标以给定角度延伸,并循环遍历该行上的像素,直到遇到黑色像素为止。
如果角度为例如180度,则很容易实现。在这种情况下,搜索将仅向下扩展,在每次迭代中将1加到列坐标。但是,例如10度更复杂。因此,我大概需要在数学上计算像素位置X处的下一个像素。
This answer在类似问题中没有帮助我,因为y轴上的值未按预期变化:
import numpy as np
angle = 90*np.pi/180
x = np.arange(0, 10)
y = np.round(np.sin(angle)*x).astype(int)
print([(x, y) for x, y in zip(x, y)])
印刷品:[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
这是错误的,因为考虑到90度角,我不希望y轴发生变化。
[The answer to this other question需要第二个'终点'坐标,我没有。”>
[最后,我找到了this question,很遗憾,该答案没有有效答案。问题中的代码似乎不返回偏移量而是浮点数,我不确定其含义。当我绕过浮子时,偏移量是错误的:
import numpy
def pol2cart(rotdist, cwangle):
x = rotdist * numpy.cos(cwangle)
y = rotdist * numpy.sin(cwangle)
return round(x), round(y)
print(pol2cart(1, 180))
打印:(-1.0, -1.0)
,而预期输出为(1.0, 0.0)
但是上述答案在每次迭代时也会给出一致的偏移量。这将仅导致三个不同的角度(水平,垂直和45度)。这是not
所需要的,因为我将遇到另一个角度,然后将其放入函数中。编辑: 输入示例
下面的图像是图像数据的示例。红点表示可能的起始位置。该点的方向没有显示。如果红点笔直指向下方,则其方向为180度。
嵌套字典包含每个像素的坐标(行,列)和颜色值:{1: {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 255, 8: 255,...
我正在尝试构建一个函数,该函数从给定角度的特定坐标开始延伸,并循环遍历该行上的像素,直到遇到黑色像素为止。如果...
我认为您可以使用Wikipedia上描述的here的Bresenham的“ Line Algorithm”
。[我知道您说过您只有起点,没有终点,但是您知道行进的角度(方向),并且您知道矩形中最长的直线是对角线,所以如果您想像一条更长的线比对角线,从起点开始并向正确的方向前进,您可以生成和超出矩形边缘的终点,并将其用于Bresenham算法的另一端。
第一个建议的答案可以通过首先检查您的线条是水平的还是垂直的,并使用该尺寸作为迭代尺寸(在您的示例中为x)来解决。
关于第二个建议的答案:您当然可以计算任意远的终点,并将这些算法应用于您提到的已知起点和终点的直线。然后,您可以遍历返回的点以检查黑色像素,如果找不到任何像素,甚至可以重新启动算法,直到达到任意终点为止。