我有一张图片,例如Width=999
和Height=767
。我知道投资回报率的轮廓,并使用rect=cv2.minAreaRect()
获取了CenterPosition
周围的Width
,Height
,Angle
和rotated rectangle
。现在,我需要将图像大小调整为另一个图像的大小,例如Width=4096
和Height=2160
。到目前为止,我正在使用cv2.resize()
这样做。
我现在的问题是,我的矩形的boxPoints
当然也发生在其他地方,rect
中的数据关于CenterPosition
,Width
,{{1现在已调整大小的ROI周围的Height
的{{1}}和Angle
未更新,因此错误。我尝试了不同的解决方法,但还没有找到任何解决方案。
这是我的代码:
rotated rectangle
以下是import numpy as np
import cv2
#Create black image
img = np.zeros((767, 999, 3), np.uint8)
#Turn ROI to white
cv2.fillConvexPoly(img, np.array(ROI_contour), (255, 255, 255))
#Get Width, Height, and Angle of rectangle around ROI
rect = cv2.minAreaRect(np.array(ROI_contour))
#Draw rotated rectangle in red
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img,[box], 0, (0,0,255), 1)
#Resize img to new size
img_resized = cv2.resize(img, (4096, 2160), interpolation=cv2.INTER_AREA)
例如可能看起来像:
在调整大小之前将ROI设置为白色 - 通过rect知道ROI的CenterPosition,Width,Height和Angle。
如何获得调整后的投资回报率的新宽度,高度和角度?
答案 0 :(得分:2)
这很简单unitary method。
在你的例子中,h_old = 767,w_old = 999; h_new = 4096,w_new = 2160。
h_ratio = h_new / h_old = 5.34,w_ratio = w_new / w_old = 2.16
假设旧图像中找到的矩形的center_position,width和height分别为:(old_center_x,old_center_y),old_rect_width和old_rect_height。
然后新值将变为:
(old_center_x * w_ratio,old_center_y * h_ratio),old_rect_width * w_ratio,old_rect_height * h_ratio。
由于两幅影像的宽高比也不相同, old_aspect_ratio = 999/767 = 1.30,new_aspect_ratio = 2160/4096 = 0.52,您还需要将此因子乘以新维度。