首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Python检测照片中对象的相似度

如何用Python检测照片中对象的相似度
EN

Stack Overflow用户
提问于 2020-09-04 20:04:33
回答 1查看 98关注 0票数 1

目前,我正在尝试用Python开发AI系统来匹配2张照片中的神圣物体。第一张照片是由DSLR相机拍摄的高分辨率神圣物体(A)照片。

第二张照片是由手机相机拍摄的神圣物体(A)照片。

我需要人工智能系统来预测类似的百分比从0- 100%。我尝试了一些方法论,但没有得到好的结果。

请建议哪种方法适用于预测模型?谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-09-04 20:59:39

一种方法是使用template-matching

如果您使用第一个图像作为模板:

  • 模板图片:

  • 源图:

  • 结果将是:

步骤:

templatesource图像都应用到灰度,并应用Canny edge detection.

代码语言:javascript
复制
-  template = cv2.imread("template\_resized.jpg") template = cv2.cvtColor(template, cv2.COLOR\_BGR2GRAY) template = cv2.Canny(template, 50, 200)
代码语言:javascript
复制
- ​
代码语言:javascript
复制
-  source = cv2.imread("source\_resized.jpg") source = cv2.cvtColor(source, cv2.COLOR\_BGR2GRAY) source = cv2.Canny(source, 50, 200)
代码语言:javascript
复制
- ​
    1. Check模板是否与源image

匹配

代码语言:javascript
复制
- `result = cv2.matchTemplate(source, template, cv2.TM_CCOEFF)`
代码语言:javascript
复制
- We need maximum-value and maximum-value location from the `result`
代码语言:javascript
复制
- `(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)`

    1. Get坐标并绘制rectangle

代码语言:javascript
复制
-  (startX, startY) = (int(maxLoc[0] \* r), int(maxLoc[1] \* r)) (endX, endY) = (int((maxLoc[0] + w) \* r), int((maxLoc[1] + h) \* r))
代码语言:javascript
复制
- Draw Rectangle
代码语言:javascript
复制
-  cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)

可能的问题:为什么不使用原始图像大小?

答:嗯,template-matching对小图像效果更好。否则,结果并不令人满意。如果我使用原始图像大小,结果将是:link

可能的问题:您为什么要使用cv2.TM_CCOEFF

答:这只是一个示例,您可以使用其他parameters进行实验

可能的问题:如何使用模板匹配来计算相似度百分比?

答:请看这个answer。如上所述,您可以使用minMaxLoc的输出作为相似度百分比。

有关完整代码,请查看opencv-python tutorial

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63740859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档