在使用开源项目 blind_watermark 给图像添加数字盲水印时,传入图像路径中文时,会出现以上报错。分析它的源码:
代码语言:javascript复制self.img = cv2.imread(filename).astype(np.float32)
它用的 opencv 读取图像和转换类型。读取水印图像也是类似的方法。
解决方法:用 numpy 读取处理图片,再对 numpy 处理后的图片数据用 cv2.imdecode 方法进行转码,转化为图片对象。
代码语言:javascript复制# self.img = cv2.imread(filename).astype(np.float32)
# 用numpy读取处理图片 再对numpy的读取的图片进行转码,转化为图片对象
self.img = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), -1).astype(np.float32)
代码语言:javascript复制# 读入图片格式的水印,并转为一维 bit 格式
# self.wm = cv2.imread(filename)[:, :, 0]
self.wm = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), -1)[:, :, 0]
将原来读取图像的代码注释掉,用新的方法重写后保存,然后再读取图像加数字盲水印,不再有报错。
代码语言:javascript复制print(":".join(["CSDN叶庭云", "https://yetingyun.blog.csdn.net/"]))