解迷题 一维码重构 低维空间一 python

codeplus 7 彩蛋题汇总:

https://blog.csdn.net/weixin_42378324/article/details/106449375

低维空间1题面:

原图:https://github.com/dq116/codeplus-7/blob/master/barcode.png

结合上一个的二维码的题有可以推断出这里隐藏着一个一维码(条形码)

思路:一张图片横看和竖看再加上左右颠倒,有四种可能,也就是旋转90°*n(1..4)。之后就试一下是几张图片组合,这题的答案是两张图片组合。

其中涉及到m的n次方种排列,如果有疑问,可转到这篇文章

本题中是4的2次方种排列。

图片拼接可以转化成numpy的数组后再用hstack拼接或者直接用Image的paste函数。

识别条形码与识别二维码的方法一样都是调用zxing,有关注意事项,可参照这篇二维码重构的文章

代码:

from PIL import Image
import  numpy as np
import matplotlib.pyplot as plt
import  zxing
def multiply(a,b):
    r=[]
    for i in a:
        for j in b:
            if isinstance(i,list):
                temp=i[:]
                temp.append(j)
                r.append(temp)
            else:
                r.append([i,j])
    return r
def decode_zxing(filename):
    zx = zxing.BarCodeReader()  # 调用条码读取包
    zxdata = zx.decode(filename)  # 图片解码
    if zxdata and zxdata.parsed:
         print(zxdata.parsed)
         return True
    return False

if __name__ == '__main__':

    img = Image.open(r'path\barcode.png')
    n=2
    imgs=[]
    for i in range(4):
        imgs.append(np.array(img.rotate(i*90)))
    a = [0,1, 2, 3]
    b=a
    while n>1:
        a=multiply(a,b)
        n-=1

    for i in a:
        img_temp = np.hstack((imgs[i[0]],imgs[i[1]]))
        img3 = Image.fromarray(img_temp)
        save_path=r'path\barcode2.png'
        img3.save(save_path)
        if decode_zxing(save_path):
            break

用paste拼接图片并局部拉伸:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':

    img = Image.open(r'path\barcode.png')
    img2=img.rotate(90)
    size1, size2 = img.size, img2.size
    joint = Image.new('RGBA', (size1[0]+size2[0], size1[1] ))
    loc1, loc2 = (0, 0), (size1[0] ,0)
    joint.paste(img, loc1)
    joint.paste(img2, loc2)
    # joint.save(r'path\barcode2.png')
    img3=np.array(joint)
    img4=img3[450:470,:,:]
    for i in range(3):
        img4=np.vstack((img4,img4))
    plt.imshow(img4)
    plt.show()

拼接完后:

这时用支付宝直接就可以扫出来了(微信扫不出来)

如果想更美观些可以局部拉伸一下:

猜你喜欢

转载自blog.csdn.net/weixin_42378324/article/details/106485104