Python 在不知道第二个坐标的情况下获取直线上的点/像素
我正在尝试构建一个函数,该函数从一个特定的坐标扩展到一个给定的角度,并在这条线上的像素中循环,直到遇到一个黑色像素 例如,如果角度为180度,则这很容易实现。在这种情况下,搜索只会向下扩展,在每次迭代中向列坐标添加1。但是,角度(例如10度)更为复杂。因此,我需要从数学上计算像素位置X处的下一个像素 在一个类似的问题中,y轴上的值没有如预期的那样改变,这对我没有帮助:Python 在不知道第二个坐标的情况下获取直线上的点/像素,python,numpy,image-processing,pixel,angle,Python,Numpy,Image Processing,Pixel,Angle,我正在尝试构建一个函数,该函数从一个特定的坐标扩展到一个给定的角度,并在这条线上的像素中循环,直到遇到一个黑色像素 例如,如果角度为180度,则这很容易实现。在这种情况下,搜索只会向下扩展,在每次迭代中向列坐标添加1。但是,角度(例如10度)更为复杂。因此,我需要从数学上计算像素位置X处的下一个像素 在一个类似的问题中,y轴上的值没有如预期的那样改变,这对我没有帮助: import numpy as np angle = 90*np.pi/180 x = np.arange(0, 10) 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)]
这是错误的,因为我不希望y轴改变,给定90度角 需要第二个“端点”坐标,我没有 最后,我发现,不幸的是,这没有一个有效的答案。问题中的代码似乎不返回偏移量,而是浮动,我不确定其含义。当我对浮动进行舍入时,偏移是错误的:
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,
第一个建议的答案可以通过首先检查您的线是更水平还是更垂直,并使用该维度作为迭代维度(在您的示例中为x)来确定
关于第二个建议的答案:你当然可以计算任意远的端点,并将这些算法应用于你提到的具有已知起点和终点的直线。然后,你可以迭代通过该点返回的点来检查黑色像素,如果没有找到,甚至重新启动算法,直到你点击任意点结束点。我认为你可以使用维基百科上描述的布雷森汉姆的“直线算法”
我知道你说你只有起点,没有终点,但你知道角度(方向)你知道矩形中最长的直线是对角线,所以如果你想象一条比对角线长的直线,从你的起点开始,朝着正确的方向走,你可以在矩形边缘之外生成和结束点,并将其用于Bresenham算法的另一端。你的示例i是什么nput看起来像?图像中的直线是数字化的。我有一个输入的1位位图图片。嵌套字典包含相应像素的行、列和值的键。例如:[3][4]=255请举一个例子如果你知道起始位置和角度,你可以很容易地计算出另一端!图像中的直线不能长于对角线,因此从起始位置开始画一条对角线+10的直线,另一端将在图像之外。然后你可以使用Bresenham向另一端移动d、 展示一些例子。线宽,终止条件,不同的角度。有很多方法可以做到这一点,所以你的问题仍然没有很好的定义。