网络编程
位置:首页>> 网络编程>> Python编程>> python基于opencv批量生成验证码的示例

python基于opencv批量生成验证码的示例

作者:奈何缘浅wyj  发布时间:2022-04-07 22:42:07 

标签:python,验证码,opencv

基本思路是使用opencv来把随机生成的字符,和随机生成的线段,放到一个随机生成的图像中去。

虽然没有加复杂的形态学处理,但是目前看起来效果还不错

尝试生成1000张图片,但是最后只有998张,因为有有重复的,被覆盖掉了。

代码如下:


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批量生成验证码的示例

来源:https://juejin.cn/post/6955740180783300615

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com