1. 程式人生 > >使用python的OpenCV模組識別滑動驗證碼的缺口

使用python的OpenCV模組識別滑動驗證碼的缺口

前面寫過一篇使用selenium模擬登入解決滑塊驗證問題,在該篇文章裡,使用selenium滑動模組找缺口主要靠“蒙”,最近終於找到一個好的方法,可以將滑動驗證碼中的缺口識別出來了,主要是學習了點選開啟連結中的方法,再次表示萬分感謝。


target.jpg


template.png

現在想要通過“template.png”在“target.jpg”中找到對應的缺口,程式碼實現如下:

# encoding=utf8

import cv2
import numpy as np

def show(name):
	cv2.imshow('Show', name)
	cv2.waitKey(0)
	cv2.destroyAllWindows()

def main():
	otemp = 'template.png'
	oblk = 'target.jpg'
	target = cv2.imread(otemp, 0)
	template = cv2.imread(oblk, 0)
	w, h = target.shape[::-1]
	temp = 'temp.jpg'
	targ = 'targ.jpg'
	cv2.imwrite(temp, template)
	cv2.imwrite(targ, target)
	target = cv2.imread(targ)
	target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)
	target = abs(255 - target)
	cv2.imwrite(targ, target)
	target = cv2.imread(targ)
	template = cv2.imread(temp)
	result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)
	x, y = np.unravel_index(result.argmax(), result.shape)
	# 展示圈出來的區域
	cv2.rectangle(template, (y, x), (y + w, x + h), (7, 249, 151), 2)
	show(template)

if __name__ == '__main__':
	main()

執行結果:


通過執行結果可以知道,已經正確的找到了缺口位置。