提示!本文章仅供学习交流,严禁用于非法用途,文章如有不当可联系本人删除!
前排提示:这是一篇水文
一. 目标网址
aHR0cHM6Ly93d3cuZGluZ3hpYW5nLWluYy5jb20vYnVzaW5lc3MvY2FwdGNoYQ==
二. 长什么样
三. 解析
这里用到的sift算法对两张图片进行相似度对比,代码如下:
def cover_sift(img1, img2): img1 = cv2.cvtColor(np.asarray(img1), cv2.IMREAD_GRAYSCALE) img2 = cv2.cvtColor(np.asarray(img2), cv2.IMREAD_GRAYSCALE) # 创建SIFT对象 sift = cv2.xfeatures2d.SIFT_create() # 寻找关键点和特征向量 kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) # 创建FLANN匹配器对象 flann = cv2.FlannBasedMatcher({'algorithm': 0, 'trees': 5}, {'checks': 50}) # 使用KNN算法匹配特征向量 matches = flann.knnMatch(des1, des2, k=2) # 筛选出最佳匹配 goodMatches = [] for m, n in matches: if m.distance < 0.7 * n.distance: goodMatches.append(m) # 输出匹配结果 # print(len(goodMatches)) return len(goodMatches)
坐标定位部分用到了ddddocr
ocr = ddddocr.DdddOcr(det=True)
将大图部分抠下来准备和小图作对比
def cut_big(binary, position): _big = dict() img = cv2.imdecode(np.array(bytearray(binary), dtype='uint8'), cv2.IMREAD_UNCHANGED) for loc in position: _img = img[loc[1]:loc[3], loc[0]:loc[2]] _img = cv2.resize(_img, (120, 120)) _big[str(loc)] = _img return _big
这里注意下,大图resize成了和小图一样的尺寸
四. 测试与总结
这里小测一下,正确率一般,综合下来的话7成应该都没有,所以明白为啥开头说是水文了吧,哈哈
我看了下,如果要提高正确率,可以重新自己做下定位模型,sift算法还可以继续沿用。
感谢阅读,下次再会~