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

作者: gaoshine | 来源:发表于2018-03-10 23:39 被阅读117次

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

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

    人眼颜色实验图片

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

    相关文章

      网友评论

        本文标题:人眼颜色实验---找数字

        本文链接:https://www.haomeiwen.com/subject/agcifftx.html