我正在尝试将我拥有的 Logo (模板)与一些图像相匹配。我的图像本质上都是彩色的,我这样做的方式是使用 openCV 中的 cvMatchTemplate() 并在我的源图像上运行模板( Logo )。我将模板缩放到多个级别以找到最佳匹配。请注意,我只是在图像上找到数字印记的 Logo ,而不是场景中出现的 Logo 。 例如:从此图像中检测天空运动 http://i56.tinypic.com/2v3j3wx.jpg (图像纯粹是为了表达和清晰我的任务,而不是我正在使用的图像
我的图片分辨率不固定,所以我将其放大到标准的 800x600。现在,当我的源图像分辨率非常差时,比如 300x300,结果非常普通。我在模板参数中使用 method=CV_TM_CCOEFF_NORMED,即使准确匹配的分数也很低(在 0 到 1.0 的范围内低至 0.4),这让我很难自信地说 Logo 是否存在。 我有两个问题:
1 - 在 opencv 模板匹配中,它如何处理彩色图像。我试图从文档中理解,我的推断是它分别计算每个 channel 的分数,并取最好的。如果是这样的话,我会更好地考虑所有三个 channel 以获得更好的结果
2 - 任何替代方法! :)
如果有任何不清楚的地方,请告诉我!
编辑(附加信息):
正如评论中所讨论的,我附上了我当前的匹配技术,即缩放模板匹配。请注意,所附图片纯粹用于测试目的,并不是我正在使用的实际图片集(无法发布,因为图片是专有的)
源图片
标志图片
使用模板匹配输出图像
虽然模板是匹配的,但此处获得的最佳匹配分数为 0.59。虽然相对来说这是一个很好的匹配分数,但仍然不足以让我确定所需的标志是否存在。在我的测试图像中,当屏幕上的 Logo 是透明的时,它仍会检测到 Logo ,但得分很低,为 0.3-0.4。使用 SURF/SIFT 可以获得更好的结果吗?
编辑(尝试冲浪)
我尝试运行 SURF 代码,该代码已在 opencv 官方文档 (minHessian = 2000) 中作为示例给出。 link here
这是输出。我不确定如何解释它(2,3 点似乎在预期范围内。这被认为是好的吗?还有进一步的建议吗?
谢谢
最佳答案
在执行模板匹配之前,您是否尝试过在源图像上使用高斯模糊?这可能会给你更准确的结果,因为我认为是源图像的质量导致了更差的匹配
OpenCV 文档中的高斯模糊链接:
或者,您可以在区域模板匹配建议上尝试直方图比较技术,以额外确认返回的模板匹配相关性,即使很小,也是正确的值:
绘制直方图是可选的,它可能对您自己的应用程序有用
^ 此方法计算图像(源和模板)的直方图以及它们之间的相关性... 但是,您不想要整个源的直方图,只是您的模板匹配认为最佳相关性所在的位置,或图像中的某个其他位置,因此您想要获得感兴趣区域 (ROI) 的直方图,请参阅以下 C++ 代码:
Mat OriginalImage = imread("source.jpg", 0);
Rect RegionOfInterest = Rect(150, 150, 250, 250);
Mat ROIImage = OriginalImage(RegionOfInterest);
这使您可以计算感兴趣区域的直方图。您应该获得模板的直方图和模板匹配认为您的模板在源中的区域的直方图,并将它们进行比较以确认或反驳模板匹配输出
关于python - OpenCV 匹配模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331613/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。
我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m