Exemplo n.º 1
0
def wm_enc(ori_img_path, watermark_str, out_path):
    # 4399和2333是两个随机种子,36和20是用于嵌入算法的除数,理论上第一个除数要大于第二个,除数越大鲁棒性越强,但是除数越大,输出图片的失真越大,需要权衡后决定
    #这两个随机种子最好对不同图片有不同的取值, 防止种子暴露而使得所有图片失去保护
    # 第二个除数可以不加,增加对水印鲁棒性没有明显的提升,但是会一定情况想影响输出图片的质量
    bwm1 = Image.open(ori_img_path)
    resize_ = 1
    if bwm1.size[0] < watermark_size[0] * 8:
        resize_ = watermark_size[0] * 10 / bwm1.size[0]
    if bwm1.size[1] * resize_ < watermark_size[1] * 8:
        resize_ = watermark_size[1] * 10 / bwm1.size[1]
    if resize_ > 1:
        bwm1 = bwm1.resize([int(i * resize_)
                            for i in bwm1.size], Image.ANTIALIAS)
        bwm1.save(ori_img_path)
    bwm1 = watermark(4399, 2333, 36, 20)

    # 读取原图
    bwm1.read_ori_img(ori_img_path)

    watermark_path = 'qrcode_temp.png'

    gen_qrcode(watermark_str, watermark_path)

    # 读取水印
    bwm1.read_wm(watermark_path)

    # 在原图中嵌入水印并输出到'out.png'
    # 用NCC数值化判断输出图片与原图的相似度
    bwm1.embed(out_path)
Exemplo n.º 2
0
def wm_dec(enc_img_path, watermark_path):
    bwm1 = Image.open(enc_img_path)
    resize_ = 1
    if bwm1.size[0] < watermark_size[0] * 8:
        resize_ = watermark_size[0] * 10 / bwm1.size[0]
    if bwm1.size[1] * resize_ < watermark_size[1] * 8:
        resize_ = watermark_size[1] * 10 / bwm1.size[1]
    if resize_ > 1:
        bwm1 = bwm1.resize([int(i * resize_)
                            for i in bwm1.size], Image.ANTIALIAS)
        bwm1.save(enc_img_path)
    # 用之前嵌入水印的参数,实例化对象,注意需要设定水印的长宽
    bwm1 = watermark(4399, 2333, 36, 20, wm_shape=watermark_size)
    # 注意需要在输出的水印的同级目录下创建 Y_U_V/ 文件夹, 否则单通道提取出来的水印不会被保存
    bwm1.extract(enc_img_path, watermark_path)
Exemplo n.º 3
0
                        dest="show_ncc")
    args = parser.parse_args()
    print(args)

    if (args.embed and args.extract) or ((not args.embed) and
                                         (not args.extract)):
        #args.embed 和 args.extract 有且只有一个为True
        print("('-em','--embed')和('-ex','--extract') 必须有且只有一个")
        exit()
    elif args.embed:
        #嵌入水印
        if len(args.key) == 3:
            random_seed1, random_seed2, mod1 = args.key
            bwm = watermark(int(random_seed1),
                            int(random_seed2),
                            mod1,
                            block_shape=(args.block_shape, args.block_shape),
                            dwt_deep=args.dwt_deep)
        elif len(args.key) == 4:
            random_seed1, random_seed2, mod1, mod2 = args.key
            bwm = watermark(int(random_seed1),
                            int(random_seed2),
                            mod1,
                            mod2,
                            block_shape=(args.block_shape, args.block_shape),
                            dwt_deep=args.dwt_deep)
        else:
            print("您输入了{}个key,但是本程序现在只支持3个或者4个key".format(len(args.key)))
            exit()

        bwm.read_ori_img(args.ori_img)
Exemplo n.º 4
0
                        default=False,
                        action="store_true",
                        dest="show_ncc")
    args = parser.parse_args()
    print(args)

    if (args.embed and args.extract) or ((not args.embed) and
                                         (not args.extract)):
        #args.embed 和 args.extract 有且只有一个为True
        print("('-em','--embed')和('-ex','--extract') 必须有且只有一个")
        exit()
    elif args.embed:
        #嵌入水印
        if len(args.key) == 3:
            random_seed1, random_seed2, mod1 = args.key
            bwm = watermark(int(random_seed1), int(random_seed2), mod1)
        elif len(args.key) == 4:
            random_seed1, random_seed2, mod1, mod2 = args.key
            bwm = watermark(int(random_seed1), int(random_seed2), mod1, mod2)
        else:
            print("您输入了{}个key,但是本程序现在只支持3个或者4个key".format(len(args.key)))
            exit()

        bwm.read_ori_img(args.ori_img)
        bwm.read_wm(args.wm)
        bwm.embed(args.output)
        if args.show_ncc:
            test_ncc(args.ori_img, args.output)

    elif args.extract:
        try:
Exemplo n.º 5
0
# attack_dic['darker10']     = 'Darker by 10%'
# #attack_dic['largersize']   = 'Image stretch'
# #attack_dic['smallersize']  = 'Image reduction'
# #attack_dic['gray']         ='Natural grayscale processing'
# #attack_dic['redgray']      ='Red grayscale processing'
#attack_dic['jpeg_90']     = 'jpeg compression ratio 90'
#attack_dic['jpeg_85']     = 'jpeg compression ratio 85'
#attack_dic['jpeg_80']     = 'jpeg compression ratio 80'
#attack_dic['jpeg_70']     = 'jpeg compression ratio 70'
#attack_dic['jpeg_60']     = 'jpeg compression ratio 60'
#attack_dic['jpeg_50']     = 'jpeg compression ratio 50'
#attack_dic['jpeg_40']     = 'jpeg compression ratio 40'
#attack_dic['jpeg_30']     = 'jpeg compression ratio 30'

if __name__ == "__main__":
    bwm = watermark(4399, 2333, 32, 20)
    bwm.read_ori_img("pic/lena_grey.png")
    bwm.read_wm("pic/wm.png")
    bwm.embed('out.png')
    imgname = 'lena.png'
    imgname_JPG = 'lena.jpg'
    for k, v in attack_dic.items():
        if k in [
                'jpeg_90', 'jpeg_85', 'jpeg_80', 'jpeg_70', 'jpeg_60',
                'jpeg_50', 'jpeg_40', 'jpeg_30'
        ]:
            QUALITY, wmd = attack('out.png', k)
            cv2.imwrite('./output/attack/' + k + '_' + imgname_JPG, wmd,
                        [int(cv2.IMWRITE_JPEG_QUALITY), QUALITY])
        else:
            wmd = attack('out.png', k)