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

发布于 2021-01-29 17:04:30

我正在尝试使用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))

关注者
0
被浏览
165
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看