此次学习原因是F5杯阿狸大大大师傅的一个爆破png宽高的图,此题crc改成的错误宽高的crc,并且删掉了几个像素块,所以直接改宽高必然得不到图片,需要用到opencv中的高斯消噪处理之类的东西,我也完全不懂,只能浅显的学习下opencv的一些简单操作
先贴个狸师傅的源码
1 | import cv2 |
引用方法
需要和numpy一起引用
1 | import cv2 |
读取图片
1 | cv2.imread('flag.png') |
imread返回的是一个三维矩阵,代表的是每个像素的信息
我们通过cv2读图片时,数据读取的通道顺序是bgr,并且是height, width, channel的排列方式。
img.shape
<class 'tuple'>: (419799, 5, 3)
从img.shape中可以看出,三维数组的形状,第一维是高度,第二维是宽度,第三维是每个像素点的信息
np.reshape(-1,1,3)
reshape用于转换矩阵,第一个-1表示将当前矩阵无论几维都转成一维,第二个1表示将矩阵再转为二维,列数为1,第三个3表示将矩阵转为三维,列数3,以此类推,加几个参数即转为几维度,数字表示列数
1 | gauss = cv2.GaussianBlur(src, (3, 3), 3) |
高斯消噪处理,算法方面的,完全不懂,暂时先知道怎么用吧
(3, 3)表示高斯矩阵的长与宽都是3,最后的3表示标准差取3
cv2.Canny表示进行canny边缘检测,也完全不懂
np.sum
用于矩阵求和
这个大概意思就是进行高斯消噪处理后对于边缘的数据求和,小于特定值就更新min,同时输出,即可能为正常图片
这里的初始值就设为了1e10
tqdm
为是一个显示处理时进度条的模块,简单用法如下
1 | s = 0 |
也可以参考 https://blog.csdn.net/zkp_987/article/details/81748098