OpenCV圖像缺口位置識別
- 1、背景
- 2、圖像缺口位置識別原理
- 3、圖像缺口位置識別實現
- 4、滑塊驗證碼HTTP圖像需要保存到本地嗎
1、背景
在使用Selenium完成自動化爬蟲時,許多網站為了防止機器人爬取數據會使用驗證碼(例如滑塊驗證碼)。通過Selenium動作操作,爬蟲可以模擬用戶輸入驗證碼或使用鼠標移動一定距離來處理驗證碼驗證過程
完成這一流程的關鍵步驟有兩步:識別出目標圖像缺口的位置,操作滑塊滑動到對應缺口位置
而識別目標圖像缺口的位置可以通過OpenCV模塊實現
OpenCV模塊詳解見文章:傳送門
2、圖像缺口位置識別原理
對于滑塊驗證碼缺口圖片(如下圖):
主要步驟包括:
- 對滑塊驗證碼圖片進行高斯模糊濾波處理,消除部分噪聲干擾
- 對滑塊驗證碼圖片應用邊緣檢測算法,通過調整相應閾值識別出滑塊邊緣
- 對上一步得到的各個邊緣輪廓信息,通過對比面積、位置、周長等特征篩選出最可能的輪廓位置,得到缺口位置
3、圖像缺口位置識別實現
3.1、導入所需模塊
import cv2
import urllib.request as req
import numpy as np
3.2、高斯模糊與邊緣檢測
高斯濾波是用來去除圖像中的一些噪聲的,基本效果其實就是把一張圖像變得模糊化,減少一些圖像噪聲干擾,從而為下一步的邊緣檢測做好鋪墊。經過高斯濾波處理后,圖像會變得模糊
由于驗證碼目標缺口通常具有比較明顯的邊緣,所以借助一些邊緣檢測算法并通過調整閾值可以找出它的位置。經過邊緣檢測算法處理后,一些比較明顯的邊緣信息會被保留下來
# 讀取圖像文件并返回一個image數組表示的圖像對象
src1 = r'C:\Users\cc\Desktop\bg.png'
image = cv2.imread(url)
print("圖像大小:", image.shape)# GaussianBlur方法進行圖像模糊化/降噪操作
# 它基于高斯函數(也稱為正態分布)創建一個卷積核(或稱為濾波器),該卷積核應用于圖像上的每個像素點
blurred = cv2.GaussianBlur(image, (5, 5), 0)# Canny方法進行圖像邊緣檢測(輪廓)
# image: 輸入的單通道灰度圖像
# threshold1: 第一個閾值,用于邊緣鏈接。一般設置為較小的值
# threshold2: 第二個閾值,用于邊緣鏈接和強邊緣的篩選。一般設置為較大的值
canny = cv2.Canny(blurred, 0, 100