人眼颜色实验---找数字

人眼颜色实验---找数字

我们眼睛看下面图片的红色部分,仔细看几秒钟,能否看到红点中有文字信息?

人眼颜色实验---找数字_第1张图片
人眼颜色实验图片

这个我是刚才微信朋友圈看到的东西,因为感兴趣,就拿来做个探究.
我自己试了一下,仔细看红色部分几秒钟,就可以分辨出是个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)

人眼颜色实验---找数字_第2张图片
把图片分解成 B G R三色的图
人眼颜色实验---找数字_第3张图片
对红色部分截取圆中心有数字部分和二值化图形
(190, 190)

02.结论

通过图形处理,我们看到当我们把红色通道单独取出来后,变成不太扎眼的灰度后,基本上就可以看到隐藏的数字了,变成二值化以后就更加清楚了.
所以这个实验的原理就是利用某种颜色的亮度差异,把形状隐藏到整个颜色下,不易察觉.
只要我们把通道分离,再把差异变化处理一下就可以还原出来.
这个除了好玩之外,我想还可以用来保护产品的信息,比如把二维码或特定标志加入到图形中,客户端采用特别的扫一扫程序才能查到信息等等吧.

03.后续

我从网上找了一些素材,感兴趣的朋友可以试试:


人眼颜色实验---找数字_第4张图片
bird.jpg
人眼颜色实验---找数字_第5张图片
birds.png
人眼颜色实验---找数字_第6张图片
horse.jpg
人眼颜色实验---找数字_第7张图片
house.jpg

你可能感兴趣的:(人眼颜色实验---找数字)