Python cv2 定位滑块验证码的位置

测试网站:https://www.geetest.com/demo/slide-bind.html

滑块:fadebg.png滑块背景:fullbg.png背景

import cv2


# 显示或保存图片
def cv_show(name, img, save=False):
    if save:
        cv2.imwrite(name, img)
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


# 获取滑块的大小
def fix_img(filename):
    #  1.为了更高的准确率,使用二值图像
    img = cv2.imread(filename)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    # 2.将轮廓提取出来
    contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    cnt = contours[0]
    # 3.用绿色(0, 255, 0)来画出最小的矩形框架
    x, y, w, h = cv2.boundingRect(cnt)
    rect_x = x + w
    rect_y = y + h
    # print(x, y, rect_x, rect_y)  # x,y是矩阵左上点的坐标,w,h是矩阵的宽和高
    img = cv2.rectangle(img, (x, y), (rect_x, rect_y), (0, 255, 0), 1)
    cv_show('img.png', img, True)  # 用绿色线框画出滑块的大小
    # 高度和宽度
    mixintu = img[y:rect_y, x:rect_x]
    cv_show("mixintu.png", mixintu, True)  # 裁剪出滑块的区域
    return mixintu


def mian():
    # 1.对滑块进行图片处理
    tp_img = fix_img('./fadebg.png')  # 裁掉透明部分,找出滑块的大小
    tp_edge = cv2.Canny(tp_img, 100, 200)
    tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2BGR)
    cv_show("1.png", tp_edge, True)
    # 2.对背景进行图片处理
    bg_img = cv2.imread('fullbg.png')
    bg_edge = cv2.Canny(bg_img, 100, 200)
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2BGR)
    cv_show("2.png", bg_pic, True)

    # 3.模板匹配matchTemplate
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    # print(min_val, max_val, min_loc, max_loc)  # 最小值,最大值,最小值的位置,最大值的位置

    # 绘制方框【方便查看】
    X = max_loc[0]
    th, tw = tp_pic.shape[:2]
    t1 = max_loc  # 左上角点的位置
    br = (t1[0] + tw, t1[1] + th)  # 右下角点的坐标
    cv2.rectangle(bg_img, t1, br, (0, 0, 225), 2)  # 绘制矩形
    cv_show('out.png', bg_img, True)


if __name__ == '__main__':
    mian()

fix_img函数:用绿色线框画出滑块的大小[img.png] -> 裁剪出滑块的区域[mixintu.png]

img.png mixintu.png
mian函数:对滑块进行图片处理[1.png] + 对背景进行图片处理[2.png] => 定位滑块验证码的位置[out.png]
1.png 2.png out.png

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷心兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值