滑动验证码-获取滑动长度
1.Scrapy_ImagePipeline保存图片2.Scrapy 保存数据案例-小说保存3.Scrapy 中 CrawlSpider 使用(一)4.Scrapy 中 CrawlSpider 使用(二)5.Scrapy 中 Request 的使用6.Scrapy_Request对象meta演示7.Scrapy_Request对象dont_filter演示8.Scrapy_Request对象Cookie的演示9.Scrapy_FormRequest对象的使用10.Scrapy中下载中间件11.Scrapy_下载中间件设置UserAgent12.Scrapy 中 Downloader 设置代理13.下载中间件实战-Scrapy与Selenium结合14.MongoDB介绍15.Mongo_如果快速学习Mongo16.Windows安装与启动MongoDB17.MongoDB通过配置文件管理参数18.Linux安装MongoDB19.什么是Docker20.为什么要使用Docker21.Docker核心概念22.Docker安装23.Docker核心命令_镜像命令24.Docker核心命令_容器命令25.Docker核心命令_其他命令26.Docker 安装 MongoDB27.MongoDB基础命令28.MongoDB数据的增加29.MongoDB数据的更新30.MongoDB删除文档31.MongoDB数据的查询32.Docker数据管理_为什么使用数据卷33.Docker数据管理_配置数据卷34.Docker数据管理_数据卷容器35.Docker实战_Mysql数据卷挂载36.MongoDB聚合操作之分组、过滤37.MongoDB聚合操作之排序、分页38.MongoDB索引Index39.Mongo中唯一索引\复合索引40.mongodb和python交互41.Splash反爬42.Dockerfile完全指南_什么是Dockerfile43.Dockerfile完全指南_构建镜像44.Dockerfile完全指南_常见的13种指令上45.Docker网络管理_Docker0网络详解46.Docker网络管理_四种网络模式47.Docker网络管理_自定义网络48.Scrapy保存数据到多个数据库49.Splash与requests结合50.Splash与Scrapy结合51.图片验证码介绍52.验证码-手动输入53.超级鹰识别验证码54.移动端爬虫55.移动端工具的安装56.模拟器配置57.Appium介绍58.Appium环境搭建 - Android SDK安装59.Appium环境搭建 - Appium安装60.appium实战61.滑动验证码-保存图片
62.滑动验证码-获取滑动长度
63.滑动验证码-编辑移动轨迹64.滑动验证码-移动滑块65.LOL皮肤66.Python调用 JS -PyExecJS, Python 调用 JS -js2py滑动验证码-获取滑动长度
思路:
-
为了更快精准的找出滑动的距离,因此可以给图片做适当的处理
- 灰度化。所谓灰度,就是图像没有色彩。举个例子,原本的彩色图片是有RGB三种颜色组成的(也就是每个像素点由三个值),现在给图像灰度化,每个像素点只有一个值(0-255)表示颜色的深度
-
为了方便测试,可以考虑使用python的实时图像框架调试
安装
pip install opencv-python==4.6.0.66
pip install streamlit==1.11.1
运行streamlit代码
streamlit run file_path
翻译
如果您是我们的开发合作伙伴之一,或者您有兴趣获得
个人技术支持或Streamlit更新,请输入您的电子邮件
地址如下。否则,您可以将该字段留空。
图片比对相似
cv2.matchTemplate(big, small, cv2.TM_CCORR_NORMED)
-
方差匹配方法(TM_SQDIFF):匹配度越高,值越接近于0
-
归一化方差匹配方法(TM_SQDIFF_NORMED):完全匹配结果为0
-
相关性匹配方法(TM_CCORR):完全匹配会得到很大值,不匹配会得到一个很小值或0
-
归一化的互相关匹配方法(TM_CCORR_NORMED):完全匹配会得到1, 完全不匹配会得到0
-
相关系数匹配方法(TM_CCOEFF):完全匹配会得到一个很大值,完全不匹配会得到0,完全负相关会得到很大的负数
- 此处与书籍以及大部分分享的资料所认为不同,研究公式发现,只有归一化的相关系数才会有[-1,1]的值域
-
归一化的相关系数匹配方法( TM_CCOEFF_NORMED):完全匹配会得到1,完全负相关匹配会得到-1,完全不匹配会得到0
-
# pip install opencv-python # pip install streamlit import cv2 import streamlit as st def get_long(): # 导入图片 img1 = cv2.imread('./imgs/cpt1.png') img2 = cv2.imread('./imgs/cpt2.png') # 建立2个 st 控制的变量 min_value = st.slider('input min value',max_value=500) max_value = st.slider('input max value',max_value=1000) # 边缘化图片 # Canny使用的滞后阈值,低阈值,高阈值 # canny1 = cv2.Canny(img1,min_value,max_value) ''' 1. Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值)。 2. 如果某一像素位置的幅值超过 高 阈值, 该像素被保留为边缘像素。 3. 如果某一像素位置的幅值小于 低 阈值, 该像素被排除。 4. 如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于 高 阈值的像素时被保留。 ''' canny1 = cv2.Canny(img1,min_value,max_value) # 保存图片 cv2.imwrite('./imgs/tcpt1.png',canny1) # 使用 streamlit 输出结果 st.write(canny1) st.image(canny1) canny2 = cv2.Canny(img2,min_value,min_value) cv2.imwrite('./imgs/tcpt2.png',canny2) st.image(canny2) # 加载边缘化后的图片 big = cv2.imread('./imgs/tcpt1.png') small = cv2.imread('./imgs/tcpt2.png') # 对比图片 rs = cv2.matchTemplate(big, small, cv2.TM_CCORR_NORMED) # 通过制定的方法来查询相应的结果 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(rs) # st.write(rs) # st.write(min_val, max_val, min_loc, max_loc) # st.write(big.shape) return max_loc[0]/big.shape[1]*340 # 画图个框来验证,匹配的结果是否正确 # tw,th = small.shape[:2] # timg = cv2.rectangle(big, max_loc, (max_loc[0]+tw,max_loc[1]+th), (255,255,0)) # st.image(timg) if __name__ == '__main__': get_long()
合集:
Spider爬虫
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库