gpt4 book ai didi

python - cv2.matchTemplate 在图像中发现错误的模板

转载 作者:行者123 更新时间:2023-12-02 16:12:07 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,该程序使用以下函数知道图像上的数字:

def img_in_img(big_picture, small_picture, tamper):
big_picture = str(big_picture)
small_picture = str(small_picture)
if os.path.isfile(big_picture) == False or os.path.isfile(small_picture) == False:
return "Image does not exist"

img = cv2.imread(big_picture,0)
templace_loc = small_picture
template = cv2.imread(templace_loc,0)
w, h = template.shape[::-1]
method = cv2.TM_CCOEFF

tamper = int(tamper)

res = cv2.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)

height, width, channels = cv2.imread(templace_loc).shape

if int(top_left[0]) < int(height + tamper) and int(top_left[0]) > int(height - tamper) and int(top_left[1]) < int(width + tamper) and int(top_left[1]) > int(width - tamper):
return True
else:
return False

但是当我用代码检查 7.png 是否在 img.png 中时

nur = "7"
if img_in_img("2020-01-14-17-36-08.537043/verification_image2.png", "verifynr/" + "old_orange" + "/" + nur + ".png", 25):
print(Style.BRIGHT + Fore.GREEN + "Color: " + "old_orange" + ", Num: " + nur + Fore.RESET)
else:
print(Style.BRIGHT + Fore.RED + "Color: " + "old_orange" + ", Num: " + nur + Fore.RESET)

它以红色显示:Color: old_orange, Num: 7

但是如果我通过将 nur7 更改为检查 6.png 是否在 img.png 中到 6 它给了我绿色:Color: old_orange, Num: 6,但这是错误的图像。

我也试过下面的代码:

img_rgb = cv2.imread("2020-01-14-17-36-08.537043/verification_image2.png")
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('verifynr/old_orange/7.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_SQDIFF)
threshold = 0.8
loc = np.where( res >= threshold)
pt = list(zip(*loc[::-1]))

if len(pt) >= 1:
print("True")

它打印 True,但它对我保存的每个数字 png 都这样做。

如何让我的程序识别 img.png 中的 7.png 而不是识别每个数字 png?

img.png:

img.png

6.png:

6.png

7.png:

7.png

最佳答案

模板匹配不是为了物体检测或者模式识别,它的作用是找到最相似的patch位置。对于检测使用检测器(基于 haar、dnn 的检测器,...),对于识别使用分类器(基于描述符或基于 nn)。'

关于python - cv2.matchTemplate 在图像中发现错误的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59759374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com