python - 如何通过Python检测照片中的相似物体
问题描述
目前,我尝试通过 Python 开发 AI 系统以匹配来自 2 张照片的神圣对象。第一张照片是由数码单反相机拍摄的高分辨率圣物 (A) 照片。 第二张照片是由手机相机拍摄的圣物 (A) 照片。
我需要人工智能系统来预测 0 - 100% 的相似百分比。我尝试了一些方法,但没有得到好的结果。
请建议哪种方法适合预测模型?感谢
解决方案
一种方法是使用template-matching
如果您使用第一张图片作为模板:
- 模板图片:
脚步:
-
- 将
template
和source
图像都转换为灰度并应用 Canny 边缘检测。
- 将
-
- 检查模板是否与源图像匹配
result = cv2.matchTemplate(source, template, cv2.TM_CCOEFF)
我们需要最大值和最大值位置
result
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
-
- 获取坐标并绘制矩形
-
(startX, startY) = (int(maxLoc[0] * r), int(maxLoc[1] * r)) (endX, endY) = (int((maxLoc[0] + w) * r), int((maxLoc[1] + h) * r))
绘制矩形
-
cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)
可能的问题:您为什么不使用原始图像尺寸?
答:嗯,template-matching
对小图像效果更好。否则结果不令人满意。如果我使用原始图像大小,结果将是:link
可能的问题:你为什么使用cv2.TM_CCOEFF
?
答:这只是一个例子,您可以尝试其他参数
可能的问题:如何使用模板匹配计算相似度百分比?
答:请看这个答案。如前所述,您可以将minMaxLoc
' 的输出用于相似性百分比。
完整代码请查看opencv-python 教程。
推荐阅读
- azure - 使用 ZIP Deploy 的包部署因 Azure DevOps Pipeline 失败
- hibernate - 在运行战争时在球衣应用程序中传递参数
- php - 插入存档循环插入另一页
- c++ - 在 cpp 中创建 GRPC 通道创建时 SIGABRT
- c# - 在单个帧上模拟第二个隐藏的未来物理场景来预测行星的轨迹?
- visual-studio - Visual Studio 重命名损坏
- javascript - 在 React/Typescript 中输入对象
- mongodb - 如何在feathersjs中上传图片并使用mongoose直接存储在mongodb数据库中
- javascript - 我想使用具有 oncklick 函数行的 json 数据创建表。单击“显示用户”后想要显示用户 ID 和电子邮件地址
- jsp - 使用jsp标签将值传递给javascript代码