算法-如何区分Opencv Python的两种形状?

算法-如何区分Opencv Python的两种形状?,python,opencv,object-detection,Python,Opencv,Object Detection,我有两个托盘图像,我需要做的就是检测托盘是否在前进方向 首先我裁剪了源图像并得到了模板图像,然后我使用“cv2.matchTemplate”算法得到了模板在源图像中的位置,所以=>这就是我想要的 但问题是托盘的头部可能会像这样变形 (由于机器的运行)。如果我降低阈值以同时获得(未变形和变形的托盘头部),程序也将检测反向托盘而不是正向托盘,因此这不是我想要的 我受够了,有什么想法吗?如果我改用另一种方法或算法,我们将不胜感激 我用的代码 import cv2 import numpy as np

我有两个托盘图像,我需要做的就是检测托盘是否在前进方向

首先我裁剪了源图像并得到了模板图像,然后我使用“cv2.matchTemplate”算法得到了模板在源图像中的位置,所以=>这就是我想要的

但问题是托盘的头部可能会像这样变形 (由于机器的运行)。如果我降低阈值以同时获得(未变形和变形的托盘头部),程序也将检测反向托盘而不是正向托盘,因此这不是我想要的

我受够了,有什么想法吗?如果我改用另一种方法或算法,我们将不胜感激

我用的代码

import cv2
import numpy as np

main_image = cv2.imread('forwardtray.jpg')
gray_image = cv2.cvtColor(main_image, cv2.COLOR_BGR2GRAY)
# open the template as gray scale image

template = cv2.imread('tray.png', 0)
width, height = template.shape[::-1] #get the width and height
# match the template using cv2.matchTemplate
match = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED)

threshold = 0.35
position = np.where(match >= threshold) # get the location of template in the image
# draw the rectangle around the matched template
for point in zip(*position[::-1]): 
cv2.rectangle(main_image, point, (point[0] + width, point[1] + height), (0, 204, 153), 0)
cv2.imshow('Template Found', main_image)
cv2.waitKey(0)

模板匹配不是一个好的方法,当你有不同的视角,这样的图像将不能很好地从一个翻译对齐。也许你应该考虑特征匹配。@ FMW42我查找了特征匹配,但官方文档说,特征匹配(SIFT,SURF)中的算法由于专利问题而被从OpenCV中删除,所以没有办法得到它。(它是在一个贡献的库中。但是你也可以使用其他方法,比如ORB,例如,我相信,例如,并附有FMW42的建议。当你有不同的观点时,模板化不是一个很好的方法,使得图像不能从一个翻译中很好地对齐。也许你应该考虑特征匹配。”42我确实查找了特征匹配,但官方文件说,由于专利问题,特征匹配(SIFT、SURF)中的算法已从opencv中删除,因此无法获得它(它在一个提供的库中。但我相信,您也可以使用其他方法,例如ORB。例如,请参阅和附议fmw42的建议。