如何使用python-opencv批量生成帶噪點噪線的數(shù)字驗證碼
第一次使用csdn寫一個文章,如果有什么寫的不對的地方,歡迎在下面評論指正,謝謝各位。
1.明確要使用的包
首先就是opencv的函數(shù)庫,還有python自帶的random和PIL(Image、ImageDraw、ImageFont),一般pthon3以上的版本都是內(nèi)置安裝的,如果沒有安裝可以通過pip install的方法安裝具體操作如圖:
輸入完按回車鍵即可安裝,因為我已經(jīng)安裝了,就不輸入回車鍵了,安裝完了之后可以通過import的方式檢驗是否安裝成功。記住先輸入python進入python的編程環(huán)境在輸入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三色通道構(gòu)成的,但是要注意在opencv里面的彩色圖像是按照BGR的順序來構(gòu)成彩色圖像的,與其他的地方采用圖像的順序不一樣(例如halcon就是安裝RGB的順序來引用彩色圖像),
采用函數(shù)的形式來形成一個三個數(shù)組,當函數(shù)返回的數(shù)值超過三個的時候,就會以數(shù)組的形式返回。
代碼如下(示例):
# 隨機生成不同顏色的組合 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)
如果你不放心是否返回了一個數(shù)組,可以進行驗證
#用于測試是否獲得了數(shù)組 a = get_random_color() print(a)
4.生成顏色隨機,數(shù)值隨機的數(shù)字生成函數(shù)get_random_number()
這個函數(shù)比較簡單,原理也是和上面隨機生成顏色組合一樣。
代碼如下(示例):
# 隨機生成數(shù)字 def get_random_number(): random_num = str(random.randint(0, 9)) return random_num
5.隨機生成一張干凈的(不帶噪聲噪線)數(shù)字驗證碼圖像
使用PIL的Image、ImageDraw、ImageFont分別用于生成白色圖像背景、定義畫筆用于往圖像寫入數(shù)字、定義文字的字形和字體大小。
代碼如下(示例):
def generate_image(): # 生成白色圖像,'RGB'類型,寬高為(150,50),底色為白色(255,255,255) image = Image.new('RGB', (150, 50), (255,255,255)) # 定義畫筆,將圖像與畫筆關(guān)聯(lián) draw = ImageDraw.Draw(image) # 定義文字字形以及字體大小 font = ImageFont.truetype("arial.ttf", size=36) name = "" # 定義一個空的字符串,用于不斷疊加數(shù)字,給圖像命名 for i in range(5): random_number = get_random_number() # 不斷疊加隨機生成的數(shù)字,用于給圖像命名 name += random_number # 在圖片上寫上數(shù)字,參數(shù)是:定位、數(shù)字(字符串)、顏色、字型 draw.text((10+i*30, 0), random_number, get_random_color(), font=font) # 將圖像保存到指定的文件夾,下面使用xxxx的形式代表文件夾 image.save('G:\xxxxxx\xxxxxxxx\%s.png' % name)
字體可以根據(jù)自己電腦已有的字體來選擇,具體路徑是C:\Windows\Fonts,
font = ImageFont.truetype("arial.ttf", size=36)
6.往圖像添加噪聲噪線
函數(shù)的這一步不使用新的函數(shù),繼續(xù)接著上一個函數(shù)( generate_image())輸入代碼,為什么不使用?因為在讀取圖像的時候我們會用到name這個函數(shù),如果使用新的函數(shù)的話,就無法使用這個變量。當然也可以通過類的方法,實現(xiàn)兩個函數(shù)之間的變量可以相互調(diào)用,這個就稍微麻煩點,這里就不過多講述了。
代碼如下(示例):
(再次提醒下面代碼是接著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) # 繪制實心圓,必須輸入?yún)?shù)分別是:圖像、圓心的位置、半徑、顏色, #最后一個是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) # 繪制線條,參數(shù)分別是:圖像、左上角的坐標、右下角的坐標、顏色 cv.line(img, (x1,y1), (x2,y2), get_random_color()) # 保存圖像 cv.imwrite(r'G:\xxxxx\xxxxxxx\%s.png'%name, img)
7.調(diào)用函數(shù)生成數(shù)字驗證碼圖像
所有的函數(shù)都已經(jīng)寫完,直接調(diào)用圖像生成函數(shù)就行了。
使用for循環(huán),循環(huán)調(diào)用generate_image()即可實現(xiàn)批量生成圖像,想要多少張就循環(huán)多少次。
for i in range(30): generate_image()
8.總結(jié)
到這一步所有的工作已經(jīng)完成了,可以去保存的指定文件夾看一下,是否成功生成,一般程序沒有報錯基本都是可以生成的。
第一次使用csdn寫文章,肯定會有很多紕漏和不足,有什么建議和意見都可以在下面評論提出,我會一一更正,謝謝各位
到此這篇關(guān)于如何使用python-opencv批量生成帶噪點噪線的數(shù)字驗證碼的文章就介紹到這了,更多相關(guān)opencv批量生成噪點驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python基于opencv批量生成驗證碼的示例
- python用faker庫批量生成假數(shù)據(jù)
- python批量生成身份證號到Excel的兩種方法實例
- Python如何批量生成和調(diào)用變量
- python利用faker庫批量生成測試數(shù)據(jù)
- python批量生成條形碼的示例
- Python操作Word批量生成合同的實現(xiàn)示例
- 利用Python腳本批量生成SQL語句
- 基于Python批量生成指定尺寸縮略圖代碼實例
- Python3批量生成帶logo的二維碼方法
- Python批量生成幻影坦克圖片實例代碼
- 利用Python批量生成任意尺寸的圖片
- python批量生成本地ip地址的方法
- 教你使用Python根據(jù)模板批量生成docx文檔
相關(guān)文章
Python?matplotlib實現(xiàn)折線圖的繪制
Matplotlib作為Python的2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形。本文將利用Matplotlib庫繪制折線圖,感興趣的可以了解一下2022-03-03python實現(xiàn)一個函數(shù)版的名片管理系統(tǒng)過程解析
這篇文章主要介紹了python實現(xiàn)一個函數(shù)版的名片管理系統(tǒng)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08Python使用Opencv實現(xiàn)邊緣檢測以及輪廓檢測的實現(xiàn)
這篇文章主要介紹了Python使用Opencv實現(xiàn)邊緣檢測以及輪廓檢測的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12django實現(xiàn)模型字段動態(tài)choice的操作
這篇文章主要介紹了django實現(xiàn)模型字段動態(tài)choice的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python利用pandas將excel文件轉(zhuǎn)換為txt文件的方法
今天小編就為大家分享一篇python利用pandas將excel文件轉(zhuǎn)換為txt文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python中如何將Tqdm與Asyncio結(jié)合使用呢
這篇文章主要和大家詳細介紹了在Python中如何將Tqdm與Asyncio結(jié)合使用呢,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-05-05