opencv
Note:这个问题我们在做爬虫时就遇到过,当屏幕画面出现变化时,APP的图标变小,就出现无法匹配不准确的情况。
cv.TM_CCOEFF
cv.TM_CCOEFF_NORMED
cv.TM_CCORR
cv.TM_CCORR_NORMED
cv.TM_SQDIFF
cv.TM_SQDIFF_NORMED
image = cv2.imread(r"scene.png", cv2.IMREAD_GRAYSCALE)
template = cv2.imread(r"element.png", cv2.IMREAD_GRAYSCALE)
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if max_val > 0.8:
print("Detected")
else:
print("Not detected")
Note:
cv2.TM_CCOEFF_NORMED
:相较于其它方法,通常被认为具有较好的鲁棒性常用的特征子算法(按照提取效果排序):
关于使用Opencv实现基于特征子的目标匹配,请参考官方教程《OpenCV – Features2D + Homography to find a known object》
我感觉SIFT还是一项很好的算法,能够提取的特征点很多,并且SIFT还是OpenCV官方Demo中使用的特征子算法,
请参考 OpenCV: Feature Matching + Homography to find Objects
请参考博文《实践教程 | 使用Pytorch从头实现Canny边缘检测》;
现在我在网上看到的特征点匹配算法有:
BF匹配OpenCV参数说明可以参考《Opencv for python(2)–图像匹配》;
这里我们尽量使用OpenCV已经实现好的匹配算法