根据问题标题。我正在尝试在一组场景中找到一组模板。除了图像质量问题,模板图像的背景和大小差异之外,模板化对象的图像在图像中的显示方式完全相同。假设给定一组空白背景的新闻台徽标模板图像,则将其视为在新闻镜头中找到Fox新闻徽标。在新闻镜头中,徽标具有自然的图像背景。
我已经使用类似于this link的方法实现了多尺度模板匹配。但是,我没有得到很好的结果。我使用模板的Canny边缘表示形式,并使用cv2.matchTemplate。对于每个模板,我在图像中找到该特定模板的最高分,然后选择返回最高分作为正确结果的模板。我尝试了模板匹配器可用的每个指标,但结果仍然很差。
我认为颜色信息也可能有用,但是OpenCV中不包括RGB模板匹配。我曾考虑过按通道进行操作,但是如果每个通道获得不同的结果,我将不知道如何协调该模板的位置和得分。
有什么想法吗?
您正在参考的教程将Canny Edge检测作为模板匹配的初步步骤,您不必完全遵循此示例。 您可以将3层图像传递给匹配模板功能。无需将图像分成3层。
参考链接示例中的代码,您可以简单地省略将图像转换为灰度的步骤。
for imagePath in glob.glob(args["images"] + "/*.jpg"):
# load the image, convert it to grayscale, and initialize the
# bookkeeping variable to keep track of the matched region
image = cv2.imread(imagePath)
#remove the following line
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
found = None
openCV中的matchTemplate
功能不需要模板为灰度。您可以将RGB模板传递给该函数。
请参阅:https://docs.opencv.org/4.1.2/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be
我个人使用RGB图像进行模板匹配,有时会有明显的色差影响我的结果,但是通常使用颜色模板对我来说效果很好。从理论上讲,如果您要寻找徽标,应该会改善您的结果。