V3D4's Blog

安全技术记录/分享/交流

0%

opencv小记

此次学习原因是F5杯阿狸大大大师傅的一个爆破png宽高的图,此题crc改成的错误宽高的crc,并且删掉了几个像素块,所以直接改宽高必然得不到图片,需要用到opencv中的高斯消噪处理之类的东西,我也完全不懂,只能浅显的学习下opencv的一些简单操作

先贴个狸师傅的源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('flag.png')
# t = img.shape
# t1 = img.reshape(-1)
# t2 = img.reshape(-1, 1)
# t3 = img.reshape(-1, 1, 3)
img = img.reshape(-1, 1, 3)
# t1 = img.shape
totPoints = img.shape[0]
import tqdm

mins = 1e10


def getgauss(w):
tp = totPoints - totPoints % w
# t = img[0,0,:]
# t = img[:tp, :, :]
# t = t.reshape(-1,w)
# t = t.reshape(-1,w,3)
src = img[:tp, :, :].reshape(-1, w, 3) #更改宽高
gauss = cv2.GaussianBlur(src, (3, 3), 3) #(3, 3)表示高斯矩阵的长与宽都是3,标准差取3
gaussedge = cv2.Canny(gauss, 0, 50)
ge = np.sum(gaussedge)
return ge


x = []
y = []

for i in tqdm.trange(10, 2000, 1):
now = getgauss(i)
x.append(i)
y.append(now)
if now < mins:
# print(x[-1])
# print(i)
mins = now
tp = totPoints - totPoints % i #更改宽高
src = img[:tp, :, :].reshape(-1, i, 3)
plt.cla()
plt.imshow(src)
plt.imsave('123.png', src)
plt.pause(0.1)
plt.show()
plt.plot(x, y)
plt.show()

引用方法

需要和numpy一起引用

1
2
import cv2
import numpy as np

读取图片

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
2
3
4
gauss = cv2.GaussianBlur(src, (3, 3), 3) 
#(3, 3)表示高斯矩阵的长与宽都是3,标准差取3
gaussedge = cv2.Canny(gauss, 0, 50)
ge = np.sum(gaussedge)

高斯消噪处理,算法方面的,完全不懂,暂时先知道怎么用吧

(3, 3)表示高斯矩阵的长与宽都是3,最后的3表示标准差取3

cv2.Canny表示进行canny边缘检测,也完全不懂

np.sum用于矩阵求和

这个大概意思就是进行高斯消噪处理后对于边缘的数据求和,小于特定值就更新min,同时输出,即可能为正常图片

这里的初始值就设为了1e10

tqdm为是一个显示处理时进度条的模块,简单用法如下

1
2
3
s = 0
for i in tqdm.trange(100000000000):
s += 1

也可以参考 https://blog.csdn.net/zkp_987/article/details/81748098