人眼颜色实验---找数字
人眼颜色实验图片我们眼睛看下面图片的红色部分,仔细看几秒钟,能否看到红点中有文字信息?
这个我是刚才微信朋友圈看到的东西,因为感兴趣,就拿来做个探究.
我自己试了一下,仔细看红色部分几秒钟,就可以分辨出是个38的红色数字.
01.分析
我推测是红色的圆中,颜色有轻微的差别,大体上颜色差别不大,所以不仔细观察是看不到数字的.
下面我把这个彩色图片做一下颜色分解:(杀鸡用牛刀,就用opencv吧!)
%matplotlib inline
import matplotlib.pyplot as plt
from IPython import display
import cv2
imagePath ='./data/rednumber.jpg'
img = cv2.imread(imagePath)
# 把图片分解成 B G R三色的图
b,g,r = cv2.split(img)
plt.subplot(131)
plt.imshow(r, cmap = 'gray')
plt.title('Red')
plt.subplot(132)
plt.imshow(g, cmap = 'gray')
plt.title('Green')
plt.subplot(133)
plt.imshow(b, cmap = 'gray')
plt.title('Blue')
plt.show()
#对红色部分截取圆中心有数字部分
r0 = r[130:320,130:320]
plt.subplot(121)
plt.imshow(r0,cmap = 'gray')
plt.title('red cut')
# 二值化图形
plt.subplot(122)
ret,th1 = cv2.threshold(r0,230,255,cv2.THRESH_BINARY)
plt.imshow(th1,cmap = 'gray')
plt.title('B&W')
plt.show()
print(r0.shape)
把图片分解成 B G R三色的图
对红色部分截取圆中心有数字部分和二值化图形
(190, 190)
02.结论
通过图形处理,我们看到当我们把红色通道单独取出来后,变成不太扎眼的灰度后,基本上就可以看到隐藏的数字了,变成二值化以后就更加清楚了.
所以这个实验的原理就是利用某种颜色的亮度差异,把形状隐藏到整个颜色下,不易察觉.
只要我们把通道分离,再把差异变化处理一下就可以还原出来.
这个除了好玩之外,我想还可以用来保护产品的信息,比如把二维码或特定标志加入到图形中,客户端采用特别的扫一扫程序才能查到信息等等吧.
03.后续
我从网上找了一些素材,感兴趣的朋友可以试试:
bird.jpg
birds.pnghorse.jpg house.jpg
网友评论