美文网首页
滑块解锁破解

滑块解锁破解

作者: __默默无闻 | 来源:发表于2024-03-04 01:19 被阅读0次

整理学习opencv过程中写的demo

滑块解锁思路

  • 两张图片、一张带缺口的原图 一张只有缺口的滑块
  • 有些服务端会直接返回base64验证码图片
  • 一般生成的缺口滑块高度与原图一致,需要解开x点位置

上代码


int identify_gap(string captcha_path, String sliding_path) {
    Mat captcha = imread(captcha_path);
    if (captcha.empty()) {
    }
    Mat sliding = imread(sliding_path);
    if (sliding.empty()) {
    }
    Mat captcha_gray, captcha_binary, sliding_gray, sliding_binary;
    //转成灰度 降低噪声
    cvtColor(captcha, captcha_gray, COLOR_BGR2GRAY);
    cvtColor(sliding, sliding_gray, COLOR_BGR2GRAY);
    //找轮廓
    cv::Canny(captcha_gray, captcha_binary, 100, 200);
    cv::Canny(sliding_gray, sliding_binary, 100, 200);

    //判断如果模板比原图高, 剪裁
    //因为我找的图片滑块比原图高 所以特殊处理剪裁了一下, 如果高度一致,跳过此步
    if (captcha_binary.rows < sliding_binary.rows) {
        Rect rect(0, 0, sliding_binary.cols, captcha_binary.rows);
        sliding_binary = sliding_binary(rect);
    }
    //匹配
    cv::Mat image_matched;
    matchTemplate(captcha_binary, sliding_binary, image_matched, cv::TM_CCOEFF_NORMED);

    double minVal, maxVal;
    cv::Point minLoc, maxLoc;
    //寻找最佳匹配位置
    cv::minMaxLoc(image_matched, &minVal, &maxVal, &minLoc, &maxLoc);
    cout << " minVal: " << minVal
         << " maxVal" << maxVal
         << " minLoc" << minLoc
         << " maxLoc" << maxLoc << endl;
    return maxLoc.x;
}

效果

随便找个滑块解锁图片试试吧

相关文章

网友评论

      本文标题:滑块解锁破解

      本文链接:https://www.haomeiwen.com/subject/baulzdtx.html