最近在使用opencv的时候,进行了roi区域的截取,但是有时候在获取到图片的正中心之后,就是在计算四个四个角点之后,发现有的角点已经超出了图片范围之外。
对于这种超出界限的情况,无非就是四种。
- left小于零
- right大于图片的宽度
- top小于零
- 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)