2022年01月23日 17:22 阅读量:1771
破解滑动验证码,关键计算图片缺口位置(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;
}