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

如何使用python在另一个图像中查找图像

陈博容
2023-03-14
问题内容

我正在尝试使用python确定一个(小)图像是否在另一个(大)图像中。

在我完全走错路之前有什么建议吗?

/ edit:好的,有些想法:我正在使用PIL,并将每个图像转换为“ P”模式,以便可以将每个像素比较为整数。我正在尝试实现诸如Boyer-
Moore字符串搜索或Knuth-Morris-Pratt算法之类的东西,但是要实现2维。

也许会有所帮助:我们不是在搜索ABC in XXXABCXXX(answer = 4),而是在搜索

ABC    
DEF    
GHI

XXXXX        
XABCX        
XDEFX       
XGHIX    
XXXXX

(answer =(2,2))


问题答案:

编辑:好的,这是天真的方法

import Image, numpy

def subimg(img1,img2):
    img1=numpy.asarray(img1)
    img2=numpy.asarray(img2)

    #img1=numpy.array([[1,2,3],[4,5,6],[7,8,9]])
    #img2=numpy.array([[0,0,0,0,0],[0,1,2,3,0],[0,4,5,6,0],[0,7,8,9,0],[0,0,0,0,0]])

    img1y=img1.shape[0]
    img1x=img1.shape[1]

    img2y=img2.shape[0]
    img2x=img2.shape[1]

    stopy=img2y-img1y+1
    stopx=img2x-img1x+1

    for x1 in range(0,stopx):
        for y1 in range(0,stopy):
            x2=x1+img1x
            y2=y1+img1y

            pic=img2[y1:y2,x1:x2]
            test=pic==img1

            if test.all():
                return x1, y1

    return False

small=Image.open('small.tif')
big=Image.open('big.tif')

print subimg(small, big)

它工作正常,但我想加快速度。我认为关键是在“测试”数组中,我们可以用来跳过图像中的某些位置。

编辑2:确保使用无损格式的图像对此进行测试。

在上Mac,安装Pillow并from PIL import Image



 类似资料:
  • 问题内容: 我需要拍摄图像并将其放置在新的生成的白色背景上,以便将其转换为可下载的桌面墙纸。因此该过程将进行: 生成具有1440x900尺寸的新全白图像 将现有图像放在顶部居中 另存为单个图像 在PIL中,我看到了该对象,但是没有任何迹象表明它可以将现有的图像数据绘制到另一个图像上。任何人都可以推荐的建议或链接? 问题答案: 这可以通过Image实例的方法来完成: 可以在Nadia Alramli

  • 问题内容: 我是Rails编程的初学者,试图在页面上显示许多图像。有些图像要放在其他图像之上。为简单起见,假设我要一个蓝色正方形,在蓝色正方形的右上角有一个红色正方形(但在角落不紧)。由于性能问题,我试图避免进行合成(使用ImageMagick等)。 我只想相对于彼此放置重叠的图像。 举一个更困难的例子,想象一下将里程表放在更大的图像中。对于六位数字,我将需要合成一百万个不同的图像,或者即时进行处

  • 问题内容: 我有两个从PIL图像转换的Numpy数组(3维uint8)。 我想查找第一张图像是否包含第二张图像,如果是,则找出匹配的第一张图像内左上像素的坐标。 有没有一种方法可以在Numpy中以足够快的方式完成此操作,而不是使用(4!非常慢)纯Python循环? 2D示例: 怎么做这样的事情? 然后将是。 问题答案: 这可以使用SciPy的公司来完成correlate2d,然后用argmax找到

  • 这是我得到的错误消息

  • 我有一个SWT按钮,它不包含文本,只是一个图像。我搜索了方法,但我找不到按它的方法。

  • 问题内容: 我正在学习Swift,并且正在创建一个使用个人照片的应用程序,并将另一个放在上面。我现在有一个hacky解决方案,可以创建该区域的屏幕截图并保存。我需要在Swift中执行此操作 但是,这是可行的,现在不再可行。但是,这也不是最佳解决方案。 那么,伙计们,我该如何将个人图像中的图像作为叠加图像保存到相机胶卷中? 帮助将不胜感激!谢谢! 问题答案: 我建议阅读此线程。您所有的答案都在那里。

  • 问题内容: 我正在尝试从图像中提取红色。我有应用阈值的代码,仅保留指定范围内的值: 但是,正如我检查的那样,红色的色相值可以在0到10的范围内,也可以在170到180的范围内。因此,我想保留这两个范围中任何一个的色相值。我尝试将阈值从10设置为170并使用函数,但随后我也获得了所有白色。我认为最好的选择是为每个范围创建一个遮罩并同时使用它们,因此我必须以某种方式将它们合并在一起,然后再继续。 有没

  • 我有一张png图像,为了更好的tesseract OCR质量,我对它进行了改进,之后我需要从原始图像制作一个可搜索的pdf。 我可以使用以下python代码,通过tesseract从改进后的图像创建一个可搜索的pdf: 然而,我想要的不是用我创建的黑白图像创建一个PDF,而是使用该b的tesseract输出