尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

渲染到背景里的滑块不适合直接用 ddddocr.slide_match()?

渲染到背景里的滑块不适合直接用 ddddocr.slide_match()? 原因有两个左边不是单独的透明 PNG 滑块而是已经渲染在背景里的滑块。中间的白色缺口有阴影ddddocr的边缘匹配容易匹配到阴影边缘所以会稳定偏几像素。这类验证码更适合纯 OpenCV。方法一背景图模板匹配推荐gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)edge cv2.Canny(gray, 80, 150)template cv2.Canny(slider, 80, 150)res cv2.matchTemplate(edge, template, cv2.TM_CCOEFF_NORMED)_, score, _, loc cv2.minMaxLoc(res)x loc[0]比ddddocr更稳定。方法二如果继续用 ddddocr一般都会加一个固定补偿res slide.slide_match(target, background)x res[target][0] offset其中offset 4~8 px很多项目最后都是靠标定这个 offset。方法三二次校正最准流程ddddocr↓得到 x↓在 x±10 px 范围内重新 templateMatch↓取最大相关值这样通常能把误差从5~8px降到1~2px。例如roi bg[:, x-10:x10slider_w]res cv2.matchTemplate(roi,slider,cv2.TM_CCOEFF_NORMED)_, _, _, loc cv2.minMaxLoc(res)x x - 10 loc[0]
返回列表