题目:
据说qsdz的girlfriend是会变化的猫猫。flag{图片中的文字}
提示:

wp:
根据题目的猫猫,且图片是正方形,而且给了a、b、n,提示还给了公式,明显是猫脸变换,网上偷个脚本解了:
import numpy as np
import cv2
def arnold_decode(image, arnold_times):
a = 0x6f6c64
b = 0x726e
# 1:创建新图像,全为0的三维数组
decode_image = np.zeros(shape=image.shape)
# 读取图片的长宽像素,这里是98x98,即总像素点
height, width = image.shape[0], image.shape[1]
N = height # N是正方形的边长
for time in range(arnold_times): # 变换的次数
# 遍历图片的像素点坐标
for old_x in range(height):
for old_y in range(width):
# 根据猫脸公式矩阵即像素点的逆置换,得到原未经过猫脸变换的图片
new_x = ((a * b + 1) * old_x + (-a) * old_y) % N #原像素点的x坐标值
new_y = ((-b) * old_x + old_y) % N #原像素点y的坐标值
decode_image[new_x, new_y, :] = image[old_x, old_y, :]
cv2.imwrite(r'C:\Users\hp430\Desktop\qsdzs_girlfriend_2\flag.png', decode_image, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) # 以PNG写入图片
return decode_image
if __name__ == '__main__':
# imread(path,flag)读取图片,加载彩色图片默认参数值是flag=1,灰度是0,透明度-1,结果是三维数组,前两维是像素坐标,最后一维是通道索引
it = cv2.imread(r'C:\Users\hp430\Desktop\qsdzs_girlfriend_2\girlfriend.png')
arnold_decode(it, 1)
flag{按理说这个点猪也该醒了}