第一次使用csdn写一个文章,如果有什么写的不对的地方,欢迎在下面评论指正,谢谢各位。
1.明确要使用的包
首先就是opencv的函数库,还有python自带的random和PIL(Image、ImageDraw、ImageFont),一般pthon3以上的版本都是内置安装的,如果没有安装可以通过pip install的方法安装具体操作如图:
输入完按回车键即可安装,因为我已经安装了,就不输入回车键了,安装完了之后可以通过import的方式检验是否安装成功。记住先输入python进入python的编程环境在输入import PIL,否则就会报错
2.引入库
代码如下(示例):
import cv2 as cv import random from PIL import Image from PIL import ImageDraw from PIL import ImageFont
3.生成随机的颜色组合get_random_color()
彩色图像是由RGB三色通道构成的,但是要注意在opencv里面的彩色图像是按照BGR的顺序来构成彩色图像的,与其他的地方采用图像的顺序不一样(例如halcon就是安装RGB的顺序来引用彩色图像),
采用函数的形式来形成一个三个数组,当函数返回的数值超过三个的时候,就会以数组的形式返回。
代码如下(示例):
# 随机生成不同颜色的组合 def get_random_color(): B = random.randint(0, 255) G = random.randint(0, 255) R = random.randint(0, 255) # 防止生成白色噪声噪线 # 使用三个if条件判断防止三个通道的颜色都是255(虽然是不可能事件) if B == 255: B = 0 elif G == 255: G = 0 elif R == 255: R = 0 return(B, G, R)
如果你不放心是否返回了一个数组,可以进行验证
#用于测试是否获得了数组 a = get_random_color() print(a)
4.生成颜色随机,数值随机的数字生成函数get_random_number()
这个函数比较简单,原理也是和上面随机生成颜色组合一样。
代码如下(示例):
# 随机生成数字 def get_random_number(): random_num = str(random.randint(0, 9)) return random_num
5.随机生成一张干净的(不带噪声噪线)数字验证码图像
使用PIL的Image、ImageDraw、ImageFont分别用于生成白色图像背景、定义画笔用于往图像写入数字、定义文字的字形和字体大小。
代码如下(示例):
def generate_image(): # 生成白色图像,'RGB'类型,宽高为(150,50),底色为白色(255,255,255) image = Image.new('RGB', (150, 50), (255,255,255)) # 定义画笔,将图像与画笔关联 draw = ImageDraw.Draw(image) # 定义文字字形以及字体大小 font = ImageFont.truetype("arial.ttf", size=36) name = "" # 定义一个空的字符串,用于不断叠加数字,给图像命名 for i in range(5): random_number = get_random_number() # 不断叠加随机生成的数字,用于给图像命名 name += random_number # 在图片上写上数字,参数是:定位、数字(字符串)、颜色、字型 draw.text((10+i*30, 0), random_number, get_random_color(), font=font) # 将图像保存到指定的文件夹,下面使用xxxx的形式代表文件夹 image.save('G:\xxxxxx\xxxxxxxx\%s.png' % name)
字体可以根据自己电脑已有的字体来选择,具体路径是C:\Windows\Fonts,
font = ImageFont.truetype("arial.ttf", size=36)
6.往图像添加噪声噪线
函数的这一步不使用新的函数,继续接着上一个函数( generate_image())输入代码,为什么不使用?因为在读取图像的时候我们会用到name这个函数,如果使用新的函数的话,就无法使用这个变量。当然也可以通过类的方法,实现两个函数之间的变量可以相互调用,这个就稍微麻烦点,这里就不过多讲述了。
代码如下(示例):
(再次提醒下面代码是接着generate_image()的,所以下面代码都有一个缩进)
width = 150 height = 50 # 读取文件夹的图像,通过name来读取指定的图像, img = cv.imread('G:\xxxxxx\xxxxxxxxxxxx\%s.png' %name) # 绘制噪点 for i in range(5): x = random.randint(0, width) y = random.randint(0, height) # 绘制实心圆,必须输入参数分别是:图像、圆心的位置、半径、颜色, #最后一个是thickness默认是None,绘制空心圆,指定为-1绘制实心圆 cv.circle(img, (x,y), 1, get_random_color(), -1) # 绘制噪线 for i in range(3): x1 = random.randint(0, width) y1 = random.randint(0, height) x2 = random.randint(0, width) y2 = random.randint(0, height) # 绘制线条,参数分别是:图像、左上角的坐标、右下角的坐标、颜色 cv.line(img, (x1,y1), (x2,y2), get_random_color()) # 保存图像 cv.imwrite(r'G:\xxxxx\xxxxxxx\%s.png'%name, img)
7.调用函数生成数字验证码图像
所有的函数都已经写完,直接调用图像生成函数就行了。
使用for循环,循环调用generate_image()即可实现批量生成图像,想要多少张就循环多少次。
for i in range(30): generate_image()
8.总结
到这一步所有的工作已经完成了,可以去保存的指定文件夹看一下,是否成功生成,一般程序没有报错基本都是可以生成的。
第一次使用csdn写文章,肯定会有很多纰漏和不足,有什么建议和意见都可以在下面评论提出,我会一一更正,谢谢各位
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】
- 陈思安.1990-国语钢琴酒吧5CD【欣代唱片】【WAV+CUE】
- 莫文蔚《莫后年代20周年世纪典藏》3CD[WAV+CUE][2G]
- 张惠妹《我要快乐》华纳[WAV+CUE][1G]
- 罗大佑1982《之乎者也》无法盗版的青春套装版 [WAV+CUE][1G]
- 曾庆瑜1989-款款柔情[日本东芝版][WAV+CUE]
- Scelsi-IntegraledesquatuorsacordesetTrioacordes-QuatuorMolinari(2024)[24bit-WAV]
- 房东的猫2017-房东的猫[科文音像][WAV+CUE]
- 杨乃文.2016-离心力(引进版)【亚神音乐】【WAV+CUE】
- 群星.2024-珠帘玉幕影视原声带【TME】【FLAC分轨】
- 芝麻龙眼.2008-光阴隧道民歌记录3CD【乡城】【WAV+CUE】
- 谭艳《再度重相逢HQII》头版限量[低速原抓WAV+CUE][549M]
- ABC唱片《蔡琴三十周年纪念版》6N纯银镀膜 [WAV+CUE][1.1G]