2012-12-07 43 views
1

我想要搜索图片中的矩形。这张照片是从PIL收集的。这意味着我会得到一个2d数组,其中每个项目都是一个带有三个颜色条目的列表。numpy.equal与嵌套列表

要使用搜索的颜色得到矩形的位置,我使用的是np.equal。这里的缩水下来例如:

>>> l = np.array([[1,1], [2,1], [2,2], [1,0]]) 
>>> np.equal(l, [2,1]) # where [2,1] is the searched color 
array([[False, True], 
    [ True, True], 
    [ True, False], 
    [False, False]], dtype=bool) 

但我预计:

array([False, True, False, False], dtype=bool) 

array([[False, False], 
    [ True, True], 
    [ False, False], 
    [False, False]], dtype=bool) 

我怎样才能实现与numpy嵌套列表比较呢?

注意:然后我想用np.wherenp.equal的结果中提取矩形的索引。

+2

取决于你想做什么可能是一种矫枉过正,但是你可以用'scipy.ndimage.filters.correlate'执行模板匹配(在图片中寻找一个固定结构的对象),并获取相关位置最大值为'result [numpy.argwhere(result == result.max())]'。 – heltonbiker

回答

4

你可以使用沿着第二轴的all方法:

>>> result = numpy.array([[1, 1], [2, 1], [2, 2], [1, 0]]) == [2, 1] 
>>> result.all(axis=1) 
array([False, True, False, False], dtype=bool) 

而得到指数:

>>> result.all(axis=1).nonzero() 
(array([1]),) 

我喜欢nonzerowhere这一点,因为where确实two very different things取决于如何许多论据被传递给它。当我需要其独特的功能时,我使用where;当我需要nonzero的行为时,我明确使用nonzero