Opencv,如何覆盖图像?

问题描述 投票:0回答:2

我有一组任意图像。一半图像是图像,一半是定义ROIS的掩模。

在我的程序的当前版本中,我使用ROI裁剪图像(即我在图像中提取与ROI蒙版的边界框匹配的矩形)。问题是,ROI掩模并不完美,而且在我的情况下,过度预测比预测更好。

所以我想复制比ROI矩形更多的东西,但如果我这样做,我可能会尝试裁剪出图像。

即:

 x, y, w, h = cv2.boundingRect(mask_contour)
 img = img[int(y-h*0.05):int(y + h * 1.05), int(x-w*0.05):int(x + w * 1.05)]

可能会失败,因为它试图访问越界像素。我可以限制价值,但我想知道是否有更好的方法

python image opencv computer-vision
2个回答
1
投票

你可以添加一个boarder using OpenCV

lena with boarder

import cv2 as cv
import random
src = cv.imread('/home/stephen/lenna.png')
borderType = cv.BORDER_REPLICATE
boarderSize = .5
top = int(boarderSize * src.shape[0])  # shape[0] = rows
bottom = top
left = int(boarderSize * src.shape[1])  # shape[1] = cols
right = left    
value = [random.randint(0,255), random.randint(0,255), random.randint(0,255)]
dst = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value)
cv.imshow('img', dst)
c = cv.waitKey(0)

0
投票

也许你可以尝试预先限制坐标。请参阅以下代码:

[ymin, ymax] = [max(0,int(y-h*0.05)), min(h, int(y+h*1.05))]
[xmin, xmax] = [max(0,int(x-w*1.05)), min(w, int(x+w*1.05))]
img = img[ymin:ymax, xmin:xmax]
© www.soinside.com 2019 - 2024. All rights reserved.