最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用python識別滑塊驗證碼中的缺口

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

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

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

一、缺口識別

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

pip install opencv-python

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

1.讀取圖片

滑塊驗證的圖片分為兩部分,一個是背景圖片:

另一個是缺口圖片:

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

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

2.識別圖片邊緣

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

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

這一步很關鍵!否則缺口匹配將不準確。

這里得到了圖片邊緣的灰度圖,進一步將其圖片格式轉為RGB格式:

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

轉換后的背景圖為:

轉換后的缺口圖為:

3.缺口匹配

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

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

res為每個位置的匹配結果,代表了匹配的概率,選出其中概率最高的點,即為缺口匹配的位置:

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

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

至此,我們已經有了缺口的位置,其X軸坐標為:

X = max_loc[0]

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

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

結果如下:

完美~ 收工!??!

二、完整代碼

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

def identify_gap(bg,tp,out):
 '''
 bg: 背景圖片
 tp: 缺口圖片
 out:輸出圖片
 '''
 # 讀取背景圖片和缺口圖片
 bg_img = cv2.imread(bg) # 背景圖片
 tp_img = cv2.imread(tp) # 缺口圖片
 
 # 識別圖片邊緣
 bg_edge = cv2.Canny(bg_img, 100, 200)
 tp_edge = cv2.Canny(tp_img, 100, 200)
 
 # 轉換圖片格式
 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 # 左上角點的坐標
 br = (tl[0]+tw,tl[1]+th) # 右下角點的坐標
 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 繪制矩形
 cv2.imwrite(out, bg_img) # 保存在本地
 
 # 返回缺口的X坐標
 return tl[0] 

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

以上就是如何用python識別滑塊中的缺口的詳細內容,更多關于python識別滑塊中的缺口的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

    深入剖析Python的列表和元組

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

    Python-for循環(huán)的內部機制

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

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

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

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

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

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

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

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

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

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

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

    python操作yaml說明

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

最新評論

化州市| 富锦市| 安福县| 温宿县| 汉阴县| 竹溪县| 贵州省| 长海县| 山东省| 高雄县| 攀枝花市| 灌南县| 伊川县| 洛南县| 富川| 靖江市| 平阴县| 阿鲁科尔沁旗| 扎兰屯市| 铅山县| 大荔县| 兖州市| 淅川县| 含山县| 汝南县| 湘西| 巴青县| 凤台县| 桓台县| 吉木萨尔县| 石柱| 屯门区| 南城县| 东乡族自治县| 故城县| 新丰县| 汝州市| 清丰县| 五莲县| 青海省| 富锦市|