python 滑块验证码计算距离三种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """ 滑块图像距离计算 """ import random import cv2 import numpy as np import requests import ddddocr def distance_cv(slice_url,bg_url): """ :param slice_url: 滑块(缺口)图片地址 :param bg_url: 背景图地址 :return: distance :rtype:integer """ slice_image = np.asarray(bytearray(requests.get(slice_url).content),dtype = np.uint8) slice_image = cv2.imdecode(slice_image, 1 ) slice_image = cv2.Canny(slice_image, 255 , 255 ) bg_image = np.asarray(bytearray(requests.get(bg_url).content), dtype = np.uint8) bg_image = cv2.imdecode(bg_image, 1 ) bg_image = cv2.pyrMeanShiftFiltering(bg_image, 5 , 50 ) bg_image = cv2.Canny(bg_image, 255 , 255 ) result = cv2.matchTemplate(bg_image,slice_image,cv2.TM_CCOEFF_NORMED) min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(result) return max_loc[ 0 ] def distance_orc(bg_url,slice_url): slide = ddddocr.DdddOcr(det = False ,ocr = False ,show_ad = False ) slide_image = requests.get(slice_url).content bg_image = requests.get(bg_url).content result = slide.slide_match(slide_image, bg_image, simple_target = True ) # 返回距离 return result[ 'target' ][ 0 ] def distance_puzzle(bg_img_path,puzzle_img_path): """ 根据背景图和缺口图,计算滑块距离 :param bg_img_path: :param puzzle_img_path: :return: """ img = cv2.imdecode(np.fromfile(bg_img_path,dtype = np.uint8),cv2.IMREAD_COLOR) tpl = cv2.imdecode(np.fromfile(puzzle_img_path,dtype = np.uint8),cv2.IMREAD_COLOR) img_gry = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) _,img_bw = cv2.threshold(img_gry, 127 , 255 ,cv2.THRESH_BINARY) tpl = cv2.cvtColor(tpl,cv2.COLOR_BGR2GRAY) for row in range (tpl.shape[ 0 ]): for col in range (tpl.shape[ 1 ]): if tpl[row,col] = = 0 : tpl[row,col] = 96 lower = np.array([ 96 ]) upper = np.array([ 96 ]) mask = cv2.inRange(tpl,lower,upper) tpl[mask = = 0 ] = 0 tpl[mask ! = 0 ] = 255 result = cv2.matchTemplate(img_bw,tpl,cv2.TM_CCOEFF_NORMED) _,_,_,max_loc = cv2.minMaxLoc(result) distance = int (max_loc[ 0 ] * 0.5833333333333333 ) + random.randint( 0 , 2 ) return distance |
♥ 作者:离岸少年
♠ 出处:https://www.cnblogs.com/jackzhuo/
♣ 本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 这或许是全网最全的 DeepSeek 使用指南,95% 的人都不知道的使用技巧(建议收藏)
· 拒绝繁忙!免费使用 deepseek-r1:671B 参数满血模型
· 本地搭建DeepSeek和知识库 Dify做智能体Agent(推荐)
· Sdcb Chats 重磅更新:深度集成 DeepSeek-R1,思维链让 AI 更透明!
· DeepSeek-R1本地部署如何选择适合你的版本?看这里