当前位置:   article > 正文

iou计算方法_iou_cv

iou_cv
  1. import cv2
  2. def IOU(Reframe, GTframe):
  3. # 得到第一个矩形的左上坐标及宽和高
  4. x1 = Reframe[0]
  5. y1 = Reframe[1]
  6. width1 = Reframe[2]
  7. height1 = Reframe[3]
  8. # 得到第二个矩形的左上坐标及宽和高
  9. x2 = GTframe[0]
  10. y2 = GTframe[1]
  11. width2 = GTframe[2]
  12. height2 = GTframe[3]
  13. # 计算重叠部分的宽和高
  14. endx = max(x1 + width1, x2 + width2)
  15. startx = min(x1, x2)
  16. width = width1 + width2 - (endx - startx)
  17. endy = max(y1 + height1, y2 + height2)
  18. starty = min(y1, y2)
  19. height = height1 + height2 - (endy - starty)
  20. # 如果重叠部分为负, 即不重叠
  21. if width <= 0 or height <= 0:
  22. ratio = 0
  23. else:
  24. Area = width * height
  25. Area1 = width1 * height1
  26. Area2 = width2 * height2
  27. ratio = Area * 1.0 / (Area1 + Area2 - Area)
  28. return ratio
  29. def draw(left_up, right_down, color, th):
  30. # print(left_up, right_down)
  31. # 要画在哪张图片上
  32. img = cv2.imread('1.jpg')
  33. # print(img.shape)
  34. cv2.rectangle(img, left_up, right_down, color, th)
  35. cv2.imshow("fff", img)
  36. # 这个是一直显示,阻塞在屏幕上。比较好调试,看效果
  37. # k = cv2.waitKey(0)
  38. # 将画后的图片继续覆盖到原图
  39. cv2.imwrite('1.jpg', img)
  40. # 计算IOU值
  41. rec_du = (53,50,100,110) # (x, y , width, height)
  42. rec_s = (40,70,80,190) # (x, y , width, height)
  43. iou_res = IOU(rec_du, rec_s)
  44. print(iou_res)
  45. # 绘图
  46. # 分别传入左上顶点和右下顶点坐标,(0, 0, 255)代表颜色,rgb通道的,2是代表画出来的线的厚度
  47. draw((53,50), (100,110), (0, 0, 255), 2)
  48. draw((40,70), (80,190), (0, 0, 255), 2)
  49. # draw(left_up, right_down, (0, 0, 255), 2)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/114153
推荐阅读
相关标签
  

闽ICP备14008679号