两种方法计算滑块验证码缺口的位置

破解滑动验证码,关键计算图片缺口位置(mouse_length =265)。

第一种:python实现

        background_image = cv2.imread('bigImage.jpg',cv2.COLOR_GRAY2RGB)
        fill_image = cv2.imread('smallImage.jpg',cv2.COLOR_GRAY2RGB)
        background_image_canny = cv2.Canny(background_image, 100, 200)
        fill_image_canny = cv2.Canny(fill_image, 100, 300)
        position_match = cv2.matchTemplate(background_image, fill_image, cv2.TM_CCOEFF_NORMED)
        min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(position_match)
        position = max_loc
        mouse_length = position[0]+1

第二种:C#实现

  private int GetMouseLength(string path, string bigImageStr, string smallImageStr)
        {

            string bigImagePath = path + "bin/res/bigImage.jpg";
            //获取背景图片并保存
            Base64ToImg(bigImageStr).Save(bigImagePath);

            string smallImagePath = path + "bin/res/smallImage.jpg";
            //获取滑块图片并保存
            Base64ToImg(smallImageStr).Save(smallImagePath);

            Mat background_image = Cv2.ImRead(bigImagePath, ImreadModes.Grayscale);
            Mat fill_image = Cv2.ImRead(smallImagePath, ImreadModes.Grayscale);
            Mat background_image_canny = new Mat();
            Cv2.Canny(background_image, background_image_canny, 100, 200);
            Mat fill_image_canny = new Mat();
            Cv2.Canny(fill_image, fill_image_canny, 100, 300);
            Mat position_match = new Mat();
            Cv2.MatchTemplate(background_image, fill_image, position_match, TemplateMatchModes.CCoeffNormed);

            OpenCvSharp.Point minLoc = new OpenCvSharp.Point(0, 0);
            OpenCvSharp.Point maxLoc = new OpenCvSharp.Point(0, 0);
            OpenCvSharp.Point position = new OpenCvSharp.Point(0, 0);

            Cv2.MinMaxLoc(position_match, out minLoc, out maxLoc);
            position = maxLoc;

            int mouse_length = position.X + 1;

            File.Delete(bigImagePath);
            File.Delete(smallImagePath);
            return mouse_length;

        }

bigImage.jpg

smallImage.jpg


标签:ImRead Canny MatchTemplate MinMaxLoc opencv