寻找沃利¶
这原本是一个 answer on stackoverflow 我们可以使用它作为一个简单的教程示例。
问题是要在下面的图片中找到沃利(他在美国的名字是沃尔多):
from pylab import imshow, show
import mahotas
import mahotas.demos
wally = mahotas.demos.load('Wally')
imshow(wally)
show()
(Source code
, png
, hires.png
, pdf
)

从2013年10月11日起(1.0.4或更高版本),您可以从mahotas获取Wally图像::
import mahotas.demos
wally = mahotas.demos.load('Wally')
你能看到他吗?
wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
分为红色、绿色和蓝色通道。最好使用下面的浮点运算,所以我们在顶部进行转换。
w = wfloat.mean(2)
W是白色通道。
pattern = np.ones((24,16), float)
for i in range(2):
pattern[i::4] = -1
在垂直轴上建立+1,+1,-1,-1的图案。这是沃利的衬衫。
v = mahotas.convolve(r-w, pattern)
用红色减去白色卷积。这将在衬衫所在的位置给出强烈的反应。
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
寻找最大值并将其放大以使其可见。现在,我们降低整个图像的色调,但区域或兴趣除外:
wally -= .8*wally * ~mask[:,:,None]
我们得到的信息如下:
wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
w = wfloat.mean(2)
pattern = np.ones((24,16), float)
for i in range(2):
pattern[i::4] = -1
v = mahotas.convolve(r-w, pattern)
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
np.subtract(wally, .8*wally * ~mask[:,:,None], out=wally, casting='unsafe')
imshow(wally)
show()
(Source code
, png
, hires.png
, pdf
)
