2b8f7545e531b88ae181b57181961f75.png

最近在使用opencv的时候,进行了roi区域的截取,但是有时候在获取到图片的正中心之后,就是在计算四个四个角点之后,发现有的角点已经超出了图片范围之外。

对于这种超出界限的情况,无非就是四种。

  1. left小于零
  2. right大于图片的宽度
  3. top小于零
  4. down大于图片的高度

上述的四种情况之一都会造成无法正常截取到区域。

我的思路就是先把能够正常截取的区域截取出来。可以使用的下面的技巧就行截取:

import cv2

image = cv2.imread(image_path)
h,w = image.shape[:2]
roi = image[max(top,0):min(down,h),max(left,0):min(right,w)]

然后再对缺失的部分进行填充

top_add = abs(top) if top <0 else 0
down_add = abs(down-h) if down > h else 0
left_add = abs(left) if left < 0 else 0
right_add = abs(right-w) if right > w else 0

# 然后使用opencv的函数cv2.copyMakeBorder
# 最后一个是填充的方法,大家可以再去搜索一下
newroi = cv2.copyMakeBorder(roi,top_add,down_add,left_add,right_add,cv2.BORDER_CONSTANT)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐