基本思路是使用opencv来把随机生成的字符,和随机生成的线段,放到一个随机生成的图像中去。
虽然没有加复杂的形态学处理,但是目前看起来效果还不错
尝试生成1000张图片,但是最后只有998张,因为有有重复的,被覆盖掉了。
代码如下:
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
51
52
53
|
import cv2 import numpy as np line_num = 10 pic_num = 1000 path = "./imgs/" def randcolor(): return (np.random.randint( 0 , 255 ),np.random.randint( 0 , 255 ),np.random.randint( 0 , 255 )) def randchar(): return chr (np.random.randint( 65 , 90 )) def randpos(x_start,x_end,y_start,y_end): return (np.random.randint(x_start,x_end), np.random.randint(y_start,y_end)) img_heigth = 60 img_width = 240 for i in range (pic_num): img_name = "" #生成一个随机矩阵,randint(low[, high, size, dtype]) img = np.random.randint( 100 , 200 ,(img_heigth,img_width, 3 ), np.uint8) #显示图像 #cv2.imshow("ranImg",img) x_pos = 0 y_pos = 25 for i in range ( 4 ): char = randchar() img_name + = char cv2.putText(img,char, (np.random.randint(x_pos,x_pos + 50 ),np.random.randint(y_pos,y_pos + 35 )), cv2.FONT_HERSHEY_SIMPLEX, 1.5 , randcolor(), 2 , cv2.LINE_AA) x_pos + = 45 #cv2.imshow("res",img) #添加线段 for i in range (line_num): img = cv2.line(img, randpos( 0 ,img_width, 0 ,img_heigth), randpos( 0 ,img_width, 0 ,img_heigth), randcolor(), np.random.randint( 1 , 2 )) #cv2.imshow("line",img) cv2.imwrite(path + img_name + ".jpg" ,img) #cv2.waitKey(0) #cv2.destroyAllWindows() |
结果:
以上就是python基于opencv批量生成验证码的示例的详细内容,更多关于python 批量生成验证码的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/6955740180783300615