gpt4 book ai didi

python - 在不知道第二个坐标的情况下获取直线上的点/像素

转载 作者:行者123 更新时间:2023-12-01 13:33:15 27 4
gpt4 key购买 nike

我正在尝试构建一个函数,它以给定角度特定坐标延伸,并循环遍历该线上的像素,直到遇到黑色像素.

如果角度为 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 ,不幸的是没有有效的答案。问题中的代码似乎没有返回偏移量,而是返回 float ,我不确定其含义。当我舍入 float 时,偏移量是错误的:

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 度)。这不是所需要的,因为我最终会得到另一个角度,然后我将其放入函数中。

编辑: 输入示例

下图是图像数据的示例。红点表示可能的起始位置。这个点有一个方向,没有指明。如果红点笔直向下,那么它的方向就是180度。

嵌套字典包含每个像素的坐标(行、列)和颜色值:{1: {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 255, 8: 255,...

enter image description here

最佳答案

我认为您可以使用 Bresenham 的 “线算法” 描述 here在维基百科上。

我知道你说你只有起点没有终点,但是你知道行进的角度(方向),你知道矩形中最长的直线是对角线,所以如果你想象一条线比对角线长,从您的起点开始并朝正确的方向前进,您可以生成超出矩形边缘的点和终点,并将其用于 Bresenham 算法的另一端。

关于python - 在不知道第二个坐标的情况下获取直线上的点/像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60363584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com