如何用Python检测照片中物体的相似性

2024-05-16 05:39:38 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我尝试用Python开发AI系统来匹配2张照片中的神圣物体。 第一张照片是由DSLR相机拍摄的高分辨率神圣物体(a)照片。 enter image description here 第二张照片是一个神圣的物体(a)手机摄像头拍摄的照片。 enter image description here

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

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


Tags: 方法模型系统相似性人工智能建议照片ai
1条回答
网友
1楼 · 发布于 2024-05-16 05:39:38

一种方法是使用template-matching

如果将第一个图像用作模板:

  • 模板图像:

  • enter image description here

  • 源图像:


  • enter image description here

  • 结果将是:


  • enter image description here

步骤:


    1. templatesource图像转换为灰度,并应用Canny边缘检测
    • template = cv2.imread("template_resized.jpg")
      template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
      template = cv2.Canny(template, 50, 200)
      
    • enter image description here

    • source = cv2.imread("source_resized.jpg")
      source = cv2.cvtColor(source, cv2.COLOR_BGR2GRAY)
      source = cv2.Canny(source, 50, 200)
      
    • enter image description here

    1. 检查模板是否与源图像匹配
    • result = cv2.matchTemplate(source, template, cv2.TM_CCOEFF)

    • 我们需要来自result的最大值和最大值位置

    • (_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)

    1. 获取坐标并绘制矩形
    • (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


答:这只是一个例子,你可以用另一个parameters进行实验

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


回答:请看这个answer。如上所述,您可以使用minMaxLoc的输出获得相似性百分比

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

相关问题 更多 >