如何在不同大小的矩形中裁剪相同的 ROI
Posted
技术标签:
【中文标题】如何在不同大小的矩形中裁剪相同的 ROI【英文标题】:How to crop the same ROI in a rectangle with different sizes 【发布时间】:2019-05-07 14:47:47 【问题描述】:我想裁剪图像的一些区域 (ROI),我目前正在从图像中提取一个矩形形状,并且在这个形状中我想提取一些始终在同一本地但矩形/图像将具有不同分辨率的 ROI但相同的部分(身份证部分)所以我不能像我现在做的那样使用固定的坐标:
((x1,y1),(x2,y2)) = box.position
print(box.position)
cv.rectangle(cvImage, (x1, y1), (x2, y2), (255,0,0), 2)
但这不适用于所有图像,我想我已经说明了这一点:)
无论矩形的分辨率/大小如何,我如何使用类似 % 或类似的东西来始终在矩形中获得相同的点。
谢谢。
【问题讨论】:
使用函数 findContours。无论大小如何,它都会为您提供图像中矩形图形的坐标 但是该矩形图形会根据原始图像具有不同的分辨率,因为我不能使用固定坐标。 您没有使用固定坐标。 findContours 会根据矩形角的位置为您提供不同的坐标。 我没有得到它:(我已经从图像中裁剪了我想要的矩形,现在我怎样才能得到一些总是在矩形上相同位置但矩形大小不同的 ROI? 给我们一个示例图像,我们可以进一步讨论。 findContour 将为您提供所需的所有矩形。 【参考方案1】:是的,您始终可以选择相同比例的图像。例如,提取一个坐标由固定比例(或百分比)定义的矩形
img_w = 1000 # = cvImage.width
img_h = 1000 # = cvImage.height
tl_x = 10.0 / 100.0
tl_y = 10.0 / 100.0
br_x = 90.0 / 100.0
br_y = 90.0 / 100.0
print (tl_x, tl_y, br_x, br_y)
rect_tl = (int(tl_x * img_w), int(tl_y * img_h))
rect_br = (int(br_x * img_w), int(br_y * img_h))
print (rect_tl, rect_br)
#cv.rectangle(cvImage, rect_tl, rect_br, (255,0,0), 2)
这将计算大小为 1000x1000 的图像中矩形的坐标,但它是一个定义为 img_w x img_h 的变量
硬编码的矩形放置有 10% 的填充,使用左上角和右下角定义
正如预期的那样,输出是:
0.1 0.1 0.9 0.9
(100, 100) (900, 900)
【讨论】:
【参考方案2】:您可以调整您阅读的图像的大小,并且可以裁剪相同的区域:
image = cv2.imread("image,jpg")
resize_image = cv2.resize(image, (640, 480))
...
【讨论】:
以上是关于如何在不同大小的矩形中裁剪相同的 ROI的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Open CV 3 python 3 用鼠标从大图像中裁剪 ROI