【发布时间】:2020-04-21 01:42:37
【问题描述】:
我输入了带有隐藏文本的图像文件,问题是隐藏文本的像素差异非常小,有时只有 1px。我想更改像素以查看此文本。
因为从不使用类似的想法将图像转换为 numpy 数组并用 dict 替换值:
from PIL import Image
import matplotlib
img = Image.open('4YtCA.jpg')
data = np.array( img, dtype='uint8' )
#print (data)
a = np.ravel(data)
u, c = np.unique(a, return_counts=True)
print (u)
[ 48 49 50 51 77 78 79 80 100 101 102 103 121 122 123 124 142 143
144 145 164 165 166 167 188 189 190 191 208 209 210 211 212 230 231 232
233 253 254 255]
#new values for replace
new = (u.reshape(-1, 4) / [1,2,3,4]).astype(int)
print (new)
[[ 48 24 16 12]
[ 77 39 26 20]
[100 50 34 25]
[121 61 41 31]
[142 71 48 36]
[164 82 55 41]
[188 94 63 47]
[208 104 70 52]
[212 115 77 58]
[233 126 84 63]]
d = dict(zip(u, np.ravel(new)))
#print (d)
#https://stackoverflow.com/a/46868996
indexer = np.array([d.get(i, -1) for i in range(data.min(), data.max() + 1)])
out = indexer[(data - data.min())]
matplotlib.image.imsave('out.png', out.astype(np.uint8))
我认为我的解决方案不是很好,因为最后一个值没有很好地看到。是否可以将像素更改为一些不同的颜色,如红色、绿色、紫色?或者以更好的方式更改合同?最好的办法是用一些巧妙的方式改变每个像素,但不知道如何。
输入图片:
输出图像:
【问题讨论】:
标签: python image numpy replace python-imaging-library