【问题标题】:How to get value of pixels which are at a certain angle from another pixel?如何从另一个像素获取某个角度的像素值?
【发布时间】:2018-01-26 12:10:51
【问题描述】:

我正在尝试实现一种方法,我必须获取所有像素的值,这些像素通过像素 (i, j) 以一定角度形成一条线

考虑下面的代码sn-p

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 像素等的线的总和。

【问题讨论】:

  • LineIterator 怎么样?
  • 我支持使用 openCV 的 LineIterator!
  • 它是如何工作的?
  • 问题是 LineIterator 在 openCV for python 中不可用

标签: python image opencv python-imaging-library


【解决方案1】:

您可以使用一些三角函数。回想一下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)]

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 2012-04-24
    • 2020-03-19
    • 2021-12-11
    • 2015-10-15
    • 2015-08-31
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多