【发布时间】:2019-03-05 18:08:19
【问题描述】:
我得到了几个应用程序图标并将大小调整为 36*36。我希望在他们中的任何两个之间获得相似性。我用 opencv 函数threshold 将它们变成了黑白的。我遵循其他问题的指示。我在两个图标上应用matchTemplate 和TM_CCOEFF_NORMED 方法但得到否定结果,这让我感到困惑。
基于doc,结果数组中不应有任何负数。谁能向我解释为什么我得到一个负数,这个负数有意义吗?
即使我从编辑中删除了所有代码部分,我也因尝试编辑帖子而出现代码缩进错误而失败了一小时。太疯狂了。我已经尝试过图标的灰度和黑白。当两个图标完全不同时,我总是会得到否定的结果。
如果我使用大小为 48*48 的原始图标,一切顺利。不知道是不是和我的resize step有关。
#read in pics
im1 = cv2.imread('./app_icon/pacrdt1.png')
im1g = cv2.resize(cv2.cvtColor(im1, cv2.COLOR_BGR2GRAY), (36, 36), cv2.INTER_CUBIC)
im2 = cv2.imread('./app_icon/pacrdt2.png')
im2g = cv2.resize(cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY), (36, 36), cv2.INTER_CUBIC)
im3 = cv2.imread('./app_icon/mny.png')
im3g = cv2.resize(cv2.cvtColor(im3, cv2.COLOR_BGR2GRAY), (36, 36), cv2.INTER_CUBIC)
#black&white convert
(thresh1, bw1) = cv2.threshold(im1g, 128 , 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
(thresh3, bw3) = cv2.threshold(im3g, 128 , 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
(thresh2, bw2) = cv2.threshold(im2g, 128 , 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
#match template
templ_match = cv2.matchTemplate(im1g, im3g, cv2.TM_CCOEFF_NORMED)[0][0]
templ_diff = 1 - templ_match
示例:
edit2:我将具有不同背景颜色或字体颜色的图标定义为非常相似的图标(但查看者会知道它们与我的示例中的图像 1 和 2 完全相同)。这就是为什么我将图标图片输入为黑白的原因。希望这是有道理的。
【问题讨论】:
-
能否请您发布您的代码和示例图片
-
为什么要转换成黑白图像?尝试对灰度图像进行相同操作。
-
@JeruLuke 实际上我已经尝试过灰度和黑白。我仍然会得到否定的结果。
-
@G_cy 你能分享一些示例图片吗?
-
@JeruLuke 感谢您的帮助。我添加了一些示例。我能知道你是如何编辑帖子的吗?即使我可以得到正确的预览,我也会不断出错。谢谢
标签: opencv python-3.6 opencv3.1