我有一个代表图片像素矩阵的numpy矩阵。这张图片包含字母,我想找到所有垂直笔划并替换其单元格的值。
简单的字母“ r”形可能看起来像这样
右:预期输出,请注意水平笔划被忽略。试想一下,这样的字母可以是无限的,而茎宽度未知。但是,让我们说我们将永远知道笔划的粗细,只是不知道笔划的粗细。
[
[255, 255, 255, 255],
[255, 0, 0, 255],
[255, 0, 255, 255],
[255, 0, 255, 255],
[255, 0, 255, 255],
[255, 255, 255, 255]
]
您将如何找到所有垂直矩形?所以输出看起来像这样
[
[False, False, False, False],
[False, True, False, False],
[False, True, False, False],
[False, True, False, False],
[False, True, False, False],
[False, False, False, False]
谢谢
答案 0 :(得分:0)
可能不是最有效,也不是最通用的方法,但是它可以起作用:
import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import convolve2d
image = np.asarray( [
[255, 255, 255, 255],
[255, 0, 0, 255],
[255, 0, 255, 255],
[255, 0, 255, 255],
[255, 0, 255, 255],
[255, 255, 255, 255]
] )
imageI = 255 - image
kernel=np.ones(3).reshape(3,1)
out= convolve2d( imageI, kernel, mode='full' )
out2 = out > 255
print out2[ 1 : len(image) + 1 ]
根据需要提供
>> [[False False False False]
>> [False True False False]
>> [False True False False]
>> [False True False False]
>> [False True False False]
>> [False False False False]]
答案 1 :(得分:0)
您可以简单地使用垂直中值过滤器:
scipy.ndimage.filters.median_filter(
a, size=(3, 1)
)
# array([[255, 255, 255, 255],
# [255, 0, 255, 255],
# [255, 0, 255, 255],
# [255, 0, 255, 255],
# [255, 0, 255, 255],
# [255, 255, 255, 255]])