亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何用python識(shí)別滑塊驗(yàn)證碼中的缺口

 更新時(shí)間:2021年04月01日 15:39:55   作者:不正經(jīng)的kimol君  
這篇文章主要介紹了如何用python識(shí)別滑塊中的缺口,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

驗(yàn)證碼往往是爬蟲路上的一只攔路虎,而其花樣也是層出不窮:圖片驗(yàn)證、滑塊驗(yàn)證、交互式驗(yàn)證、行為驗(yàn)證等。隨著OCR技術(shù)的成熟,圖片驗(yàn)證已經(jīng)漸漸淡出主流,而滑塊驗(yàn)證越來越多地出現(xiàn)在大眾視野。
“這么厲害,這小子長啥樣呢?”沒錯(cuò),它就長這損sai:

解決它的方法也很直觀,首先找到缺口的位置(通常只需要X軸的位置),然后拖動(dòng)滑塊即可。
今天kimol君將帶領(lǐng)大家用python識(shí)別出滑塊驗(yàn)證中的缺口位置。

一、缺口識(shí)別

識(shí)別圖片中的缺口,主要是利用python中的圖像處理庫cv2,其安裝方法如下:

pip install opencv-python

注:這里并不是“pip install cv2”哦~

1.讀取圖片

滑塊驗(yàn)證的圖片分為兩部分,一個(gè)是背景圖片:

另一個(gè)是缺口圖片:

利用imread函數(shù)將其讀?。?/p>

# 讀取背景圖片和缺口圖片
bg_img = cv2.imread('bg.jpg') # 背景圖片
tp_img = cv2.imread('tp.png') # 缺口圖片

2.識(shí)別圖片邊緣

為了更好地將缺口與背景匹配,我們首先得識(shí)別出圖片的邊緣:

# 識(shí)別圖片邊緣
bg_edge = cv2.Canny(bg_img, 100, 200)
tp_edge = cv2.Canny(tp_img, 100, 200)

這一步很關(guān)鍵!否則缺口匹配將不準(zhǔn)確。

這里得到了圖片邊緣的灰度圖,進(jìn)一步將其圖片格式轉(zhuǎn)為RGB格式:

# 轉(zhuǎn)換圖片格式
bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)

轉(zhuǎn)換后的背景圖為:

轉(zhuǎn)換后的缺口圖為:

3.缺口匹配

利用cv2中的matchTemplate函數(shù),可以在背景圖片中搜索對(duì)應(yīng)的缺口,具體代碼如下:

# 缺口匹配
res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)

res為每個(gè)位置的匹配結(jié)果,代表了匹配的概率,選出其中概率最高的點(diǎn),即為缺口匹配的位置:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 尋找最優(yōu)匹配

min_val,max_val,min_loc,max_loc分別為匹配的最小值、匹配的最大值、最小值的位置、最大值的位置。
ps.當(dāng)然,這里完全可以自己寫一個(gè)循環(huán)來實(shí)現(xiàn),但是有現(xiàn)成的函數(shù)為什么不用呢?

至此,我們已經(jīng)有了缺口的位置,其X軸坐標(biāo)為:

X = max_loc[0]

為了更直觀地展示缺口的位置,我們將缺口用矩形框標(biāo)注出來:

# 繪制方框
th, tw = tp_pic.shape[:2] 
tl = max_loc # 左上角點(diǎn)的坐標(biāo)
br = (tl[0]+tw,tl[1]+th) # 右下角點(diǎn)的坐標(biāo)
cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形
cv2.imwrite('out.jpg', bg_img) # 保存在本地

結(jié)果如下:

完美~ 收工?。。?/p>

二、完整代碼

為了在實(shí)際應(yīng)用中更方便的使用,我們將代碼封裝為一個(gè)函數(shù):

def identify_gap(bg,tp,out):
 '''
 bg: 背景圖片
 tp: 缺口圖片
 out:輸出圖片
 '''
 # 讀取背景圖片和缺口圖片
 bg_img = cv2.imread(bg) # 背景圖片
 tp_img = cv2.imread(tp) # 缺口圖片
 
 # 識(shí)別圖片邊緣
 bg_edge = cv2.Canny(bg_img, 100, 200)
 tp_edge = cv2.Canny(tp_img, 100, 200)
 
 # 轉(zhuǎn)換圖片格式
 bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
 tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
 
 # 缺口匹配
 res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 尋找最優(yōu)匹配
 
 # 繪制方框
 th, tw = tp_pic.shape[:2] 
 tl = max_loc # 左上角點(diǎn)的坐標(biāo)
 br = (tl[0]+tw,tl[1]+th) # 右下角點(diǎn)的坐標(biāo)
 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形
 cv2.imwrite(out, bg_img) # 保存在本地
 
 # 返回缺口的X坐標(biāo)
 return tl[0] 

這里選擇了讀取本地圖片文件,在爬蟲過程中其實(shí)不是特別方便。如果有感興趣的小伙伴,可以自己改動(dòng)一下,將輸入改為圖片流即可。

以上就是如何用python識(shí)別滑塊中的缺口的詳細(xì)內(nèi)容,更多關(guān)于python識(shí)別滑塊中的缺口的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python實(shí)現(xiàn)VPN搭建的流程步驟

    使用Python實(shí)現(xiàn)VPN搭建的流程步驟

    VPN(虛擬私人網(wǎng)絡(luò))是一種有效的解決方案,可以幫助我們在網(wǎng)絡(luò)上匿名瀏覽,保護(hù)數(shù)據(jù)傳輸?shù)陌踩?雖然市面上有許多商業(yè)VPN服務(wù),但你也可以通過Python自己搭建一個(gè)簡單的VPN,本文將介紹如何用Python建立自己的VPN,需要的朋友可以參考下
    2024-06-06
  • Pytorch如何加載自己的數(shù)據(jù)集(使用DataLoader讀取Dataset)

    Pytorch如何加載自己的數(shù)據(jù)集(使用DataLoader讀取Dataset)

    這篇文章主要介紹了Pytorch如何加載自己的數(shù)據(jù)集(使用DataLoader讀取Dataset)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 深入剖析Python的列表和元組

    深入剖析Python的列表和元組

    這篇文章主要介紹了深入剖析Python的列表和元組,Python有4個(gè)內(nèi)建的數(shù)據(jù)結(jié)構(gòu),它們可以統(tǒng)稱為容器,因?yàn)樗鼈儗?shí)際上是一些“東西”組合而成的結(jié)構(gòu),而這些“東西”,可以是數(shù)字、字符甚至列表,或是它們的組合,需要的朋友可以參考下
    2023-07-07
  • Python-for循環(huán)的內(nèi)部機(jī)制

    Python-for循環(huán)的內(nèi)部機(jī)制

    這篇文章主要介紹了Python for循環(huán)的內(nèi)部機(jī)制,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Django 路由層URLconf的實(shí)現(xiàn)

    Django 路由層URLconf的實(shí)現(xiàn)

    這篇文章主要介紹了Django 路由層URLconf的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 分析在Python中何種情況下需要使用斷言

    分析在Python中何種情況下需要使用斷言

    這篇文章主要介紹了分析在Python中何種情況下需要使用斷言,以避免在斷言使用中經(jīng)??赡芘龅降腻e(cuò)誤,作者給出了具體代碼示例,需要的朋友可以參考下
    2015-04-04
  • 使用python+pygame實(shí)現(xiàn)中秋節(jié)動(dòng)畫效果

    使用python+pygame實(shí)現(xiàn)中秋節(jié)動(dòng)畫效果

    馬上就要中秋節(jié)了,使用python可以實(shí)現(xiàn)中秋節(jié)動(dòng)畫效果,包括月亮、兔子和煙花嗎?當(dāng)然是可以的,那該如何實(shí)現(xiàn)呢?這篇文章我們主要使用pygame來實(shí)現(xiàn),文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • python實(shí)現(xiàn)Flappy Bird源碼

    python實(shí)現(xiàn)Flappy Bird源碼

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Flappy Bird源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python?Flask中文件與異常處理的實(shí)踐指南

    Python?Flask中文件與異常處理的實(shí)踐指南

    在開發(fā)Web應(yīng)用時(shí),文件處理和異常處理是常見的需求,本文將通過一個(gè)實(shí)際案例,分析如何優(yōu)化Python?Flask應(yīng)用中的文件處理邏輯,感興趣的小伙伴可以了解下
    2025-05-05
  • python操作yaml說明

    python操作yaml說明

    這篇文章主要介紹了python操作yaml說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評(píng)論