根据问题标题。我试图在一组场景中找到一组模板。除了图像质量问题,模板图像的背景和尺寸差异之外,模板化对象的图像在图像中完全按原样显示。想象一下,在新闻片段中找到福克斯新闻标志,给出一组带有空白背景的新闻台标志模板图像。在新闻片段中,徽标将具有自然的图像背景。
我使用类似this link的方法实现了多尺度模板匹配。但是,我没有取得好成绩。我使用模板的Canny边缘表示,并使用cv2.matchTemplate。对于每个模板,我找到图像中该特定模板的最高分数,然后选择返回最高分数的模板作为正确结果。我已经尝试了模板匹配器可用的每个指标,结果仍然很差。
我认为颜色信息也可能有用,但OpenCV中不包含RGB模板匹配。我想过按频道进行,但如果每个频道得到不同的结果,我就不知道如何调整该模板的位置和分数。
有什么想法吗?
答案 0 :(得分:0)
您正在参考的教程将Canny Edge检测作为模板匹配的初步步骤,您不必完全遵循此示例。 您可以将3层图像传递给匹配模板函数。无需将图像分成3层。
参考链接示例中的代码,您可以简单地省略将图像转换为灰度的步骤。
%APPDATA%\postgresql\
openCV中的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
函数不需要模板为灰度。您可以将RGB模板传递给该函数。
请参阅:https://docs.opencv.org/4.1.2/df/dfb/group__imgproc__object.html#ga586ebfb0a7fb604b35a23d85391329be
我个人使用RGB图像进行模板匹配,剧烈的色差有时会影响我的结果,但是通常使用颜色模板对我来说效果很好。从理论上讲,如果您要寻找徽标,应该会改善您的结果。