攻防世界[中等]QR1
[中等] QR1
010打开 没问题 没有文件隐藏 是图片本身的隐写 仔细看有很多黑色像素点
法1
不是扫描全能王的暗广




法2
微小的黑点构成二维码,但太细看不清。让黑点变粗,就像 PS 里描边一样
原始图(白底+细黑点)
↓
二值化 → 纯白底 + 纯黑点
↓
反转 → 黑底 + 白点
↓
膨胀 → 黑底 + 变粗的白点 ← 描边效果
↓
反转 → 白底 + 变粗的黑点
↓
保存 → 清晰二维码
import cv2
import numpy as np
img = cv2.imread(“enc.png”, 0) # 读灰度图
_, binary = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
kernel = np.ones((10, 10), np.uint8) # 描边宽度=10
dilated = cv2.dilate(255 - binary, kernel) # 膨胀黑点
result = 255 - dilated # 反转回黑白
cv2.imwrite(“output.png”, result)

这样看图片也可以看出来是放大了很多很多小的像素点
法3
每两个黑点之间隔了13个像素
from PIL import Image
两个黑色像素但间隔13像素 x,y起于526
filename = “enc.png”
img = Image.open(filename).convert(‘RGB’)
print(img.size) # 打印图片大小
width = img.size[0] # 长度
height = img.size[1] # 宽度
for x in range(526, width-526,13): # 遍历所有长度的点,步长为13
for y in range(526,height-526, 13): # 遍历所有宽度的点,步长为13
rgb1 = img.getpixel((x, y))
rgb2 = img.getpixel((x+13,y+13)) #获取偏移13像素位置得点得rgb,即当前(x,y)坐标右下角位置得点
if rgb1 == rgb2 == (0, 0, 0):
for i in range(14):
for j in range(14):
img.putpixel((x+i,y+j),(0,0,0))
img.save(“result.png”) # 保存修改像素点后的图片
