我试图实现一种方法,我必须获取通过像素(i,j)以特定角度形成一条线的所有像素的值
请考虑以下代码段
sum = image.getpixel(((i - 7), (j + 2))) + image.getpixel(((i - 6), (j + 2))) + image.getpixel(
((i - 5), (j + 1))) + image.getpixel(
((i - 4), (j + 1))) + image.getpixel(((i - 3), (j + 1))) + image.getpixel(((i - 2), (j + 1))) + image.getpixel(
((i - 1), j)) + image.getpixel((i, j)) + image.getpixel(((i + 1), j)) + image.getpixel(
((i + 2), (j - 1))) + image.getpixel(((i + 3), (j - 1))) + image.getpixel(((i + 4), (j - 1))) + image.getpixel(
((i + 5), (j - 1))) + image.getpixel(((i + 6), (j - 2))) + image.getpixel(((i + 7), (j - 2)))
avg_sum = sum / 15
现在在上面的代码中我知道哪个像素相对于i,j形成了15度角的线。因此,我能够获得所有像素的值。
现在有一种简单的方法可以做到这一点,因为目前这段代码找到15个像素的灰度级总和,通过i,j在15度形成这条线。我希望这段代码具有灵活性,以便我可以轻松找到长度为15像素或13像素或11像素的行总和,等等。
答案 0 :(得分:2)
你可以使用一些三角学。回想一下sin(angle) = y/x
,y = x*sin(angle)
。只需创建一个x
值数组,无论您想要多长时间,然后将其插入y
值的公式中。您当然需要事后舍入y
值。然后你可以将它们全部转换为该行的起始位置。
>>> import numpy as np
>>> angle = 15*np.pi/180
>>> x = np.arange(0,10)
>>> y = np.round(np.sin(angle)*x).astype(int)
>>> [(x,y) for x, y in zip(x, y)]
[(0, 0), (1, 0), (2, 1), (3, 1), (4, 1), (5, 1), (6, 2), (7, 2), (8, 2), (9, 2)]