滑动验证码-获取滑动长度

滑动验证码-获取滑动长度

image-20220809225558059

思路:

  • 为了更快精准的找出滑动的距离,因此可以给图片做适当的处理

    • 灰度化。所谓灰度,就是图像没有色彩。举个例子,原本的彩色图片是有RGB三种颜色组成的(也就是每个像素点由三个值),现在给图像灰度化,每个像素点只有一个值(0-255)表示颜色的深度
  • 为了方便测试,可以考虑使用python的实时图像框架调试

安装

pip install opencv-python==4.6.0.66
pip install streamlit==1.11.1

运行streamlit代码

streamlit run file_path

image-20220809173749549

翻译

如果您是我们的开发合作伙伴之一,或者您有兴趣获得

个人技术支持或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()

     

posted @   jiang_jiayun  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示