当前位置: 首页 > 面试题库 >

在Numpy图像中查找子图像

宣熙云
2023-03-14
问题内容

我有两个从PIL图像转换的Numpy数组(3维uint8)。

我想查找第一张图像是否包含第二张图像,如果是,则找出匹配的第一张图像内左上像素的坐标。

有没有一种方法可以在Numpy中以足够快的方式完成此操作,而不是使用(4!非常慢)纯Python循环

2D示例:

a = numpy.array([
    [0, 1,  2,  3],
    [4, 5,  6,  7],
    [8, 9, 10, 11]
])
b = numpy.array([
    [2, 3],
    [6, 7]
])

怎么做这样的事情?

position = a.find(b)

position然后将是(0, 2)


问题答案:

这可以使用SciPy的公司来完成correlate2d,然后用argmax找到互相关的峰值。

这是对数学和思想的更完整说明,并提供了一些示例。

如果您想呆在纯粹的Numpy中,甚至不使用scipy,或者图像很大,则最好使用基于FFT的互相关方法。

编辑:这个问题专门要求一个 纯粹的Numpy解决方案
。但是,如果可以使用OpenCV或其他图像处理工具,则使用其中一种显然会更容易。下面的PiQuer提供了这样的示例,如果可以使用,我建议您使用它。



 类似资料:
  • 这是我得到的错误消息

  • 第一个http://storage.thelogin.ru/stackoverflow/find-updated-regangles-in-image/1.png第二个http://storage.thelogin.ru/stackoverflow/find-updated-regangles-in-image/2.png ImageMagick的告诉我这些像素已更新: 比较http://stor

  • 我使用了Canny边缘检测器来检测边缘,下面是输出。我需要检测图像中边缘的密度,并选择密度较高的区域。如何在opencv中实现这一点。如何使用opencv查找高强度像素的密度? 如何获得以下输出?

  • 给定BGR格式的尺寸数组(宽度、高度、3),如何将此图像转换为sRGB空间?OpenCV()不实现此转换,也不实现对sRGB的任何转换。 我进行了一些研究,找不到任何函数做到这一点,甚至找不到一个我可以遵循的公式来实现我自己的函数。 有什么建议或指导吗?而为什么这种转型在互联网上是一件如此隐晦的事情呢?

  • 更改屏幕模式 您可以使用屏幕模式选项在整个屏幕上查看图像。可以显示或隐藏菜单栏、标题栏和滚动条。 注意:按下 F 键可快速循环切换屏幕模式。 执行下列操作之一: 要显示默认模式(菜单栏位于顶部,滚动条位于侧面),请选取“视图”>“屏幕模式”>“标准屏幕模式”。或单击应用程序栏上的“屏幕模式”按钮 ,并从弹出式菜单中选择“标准屏幕模式”。 要显示带有菜单栏和 50% 灰色背景、但没有标题栏和滚动条的

  • 问题内容: 例如,可能有一个文本为行的表。我怎么能找到所有的笔直的水平线穿过桌子?E、 g.(红线是找到行) 问题答案: 只是“对于这个问题”,为了检测“水平线”,“morph op”是够了。