updates
This commit is contained in:
+20
-2
@@ -74,7 +74,7 @@ class LoadImages: # for inference
|
||||
print('image %g/%g %s: ' % (self.count, self.nF, path), end='')
|
||||
|
||||
# Padded resize
|
||||
img, _, _, _ = letterbox(img0, height=self.height)
|
||||
img, _, _, _ = letterbox_rect(img0, height=self.height)
|
||||
|
||||
# Normalize RGB
|
||||
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB
|
||||
@@ -239,9 +239,11 @@ def letterbox(img, height=416, color=(127.5, 127.5, 127.5)):
|
||||
# Resize a rectangular image to a padded square
|
||||
shape = img.shape[:2] # shape = [height, width]
|
||||
ratio = float(height) / max(shape) # ratio = old / new
|
||||
new_shape = (round(shape[1] * ratio), round(shape[0] * ratio))
|
||||
new_shape = (round(shape[1] * ratio), round(shape[0] * ratio)) # new_shape = [width, height]
|
||||
|
||||
dw = (height - new_shape[0]) / 2 # width padding
|
||||
dh = (height - new_shape[1]) / 2 # height padding
|
||||
|
||||
top, bottom = round(dh - 0.1), round(dh + 0.1)
|
||||
left, right = round(dw - 0.1), round(dw + 0.1)
|
||||
img = cv2.resize(img, new_shape, interpolation=cv2.INTER_AREA) # resized, no border
|
||||
@@ -249,6 +251,22 @@ def letterbox(img, height=416, color=(127.5, 127.5, 127.5)):
|
||||
return img, ratio, dw, dh
|
||||
|
||||
|
||||
def letterbox_rect(img, height=416, color=(127.5, 127.5, 127.5)):
|
||||
# Resize a rectangular image to a 32 pixel multiple rectangle
|
||||
shape = img.shape[:2] # shape = [height, width]
|
||||
ratio = float(height) / max(shape) # ratio = old / new
|
||||
new_shape = (round(shape[1] * ratio), round(shape[0] * ratio)) # new_shape = [width, height]
|
||||
|
||||
dw = np.mod(height - new_shape[0], 32) / 2 # width padding
|
||||
dh = np.mod(height - new_shape[1], 32) / 2 # height padding
|
||||
|
||||
top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
|
||||
left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
|
||||
img = cv2.resize(img, new_shape, interpolation=cv2.INTER_AREA) # resized, no border
|
||||
img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # padded square
|
||||
return img, ratio, dw, dh
|
||||
|
||||
|
||||
def random_affine(img, targets=(), degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-2, 2),
|
||||
borderValue=(127.5, 127.5, 127.5)):
|
||||
# torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10))
|
||||
|
||||
+5
-5
@@ -100,11 +100,11 @@ def xywh2xyxy(x):
|
||||
return y
|
||||
|
||||
|
||||
def scale_coords(img_size, coords, img0_shape):
|
||||
# Rescale x1, y1, x2, y2 from 416 to image size
|
||||
gain = float(img_size) / max(img0_shape) # gain = old / new
|
||||
pad_x = (img_size - img0_shape[1] * gain) / 2 # width padding
|
||||
pad_y = (img_size - img0_shape[0] * gain) / 2 # height padding
|
||||
def scale_coords(img1_shape, coords, img0_shape):
|
||||
# Rescale coords1 (xyxy) from img1_shape to img0_shape
|
||||
gain = max(img1_shape[1:3]) / max(img0_shape[:2]) # gain = old / new
|
||||
pad_x = (img1_shape[2] - img0_shape[1] * gain) / 2 # width padding
|
||||
pad_y = (img1_shape[1] - img0_shape[0] * gain) / 2 # height padding
|
||||
coords[:, [0, 2]] -= pad_x
|
||||
coords[:, [1, 3]] -= pad_y
|
||||
coords[:, :4] /= gain
|
||||
|
||||
Reference in New Issue
Block a user