【问题标题】:Extract colored line from numpy image从 numpy 图像中提取彩色线条
【发布时间】:2017-11-11 17:24:48
【问题描述】:

我有一张带有彩色曲线的图片。

我想为每一行提取曲线较高像素的索引。

此代码有效,但速度很慢(f是图像,magic是线条颜色的RGB代码):

res = f.shape[0]
magic = 146, 47, 6
return [min(l for l in range(res) if np.array_equal(magic, f[l, c, :3])) for c in range(res)]

我怎样才能更快地做同样的事情?

【问题讨论】:

    标签: python arrays image numpy


    【解决方案1】:

    比较每行的magic 元素,即最后一个轴。这给了我们一个2D 掩码。

    mask = (f == magic).all(-1)
    

    既然,我们终于在做min(l),这意味着在那个掩码数组中找到第一个True 的索引。所以,如果至少有一个保证匹配,我们可以使用argmax 来获取第一个匹配的索引,就像这样 -

    (f == magic).all(-1).argmax(0)
    

    【讨论】:

    • 我发现了一个技巧:(f[:, :, :3] == magic).all(axis=-1).argmax(0)
    • argmax 采用第一个为真的索引,所以这里它按预期返回最小值!
    • 感谢您的帮助!我接受了您编辑的答案:)
    • @Labo 我无法在最后运行您的循环理解,然后我第一次错误地解释了它。一个简单的循环版本会更好地了解正在发生的事情,而不是将所有内容都集中在一行中,这会损害可读性,而且我对循环理解不好:)
    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多