python实现图像随机裁剪的示例代码

实验条件:

  1. 从1张图像随机裁剪100张图像
  2. 裁剪出图像的大小为 60 x 60
  3. IoU 大于等于 th=0.6 的裁剪框用红色标出,其它裁剪框用蓝色标出
  4. IoU 比对原始区域用绿框标出

实验代码:

import cv2 as cv

import numpy as np

np.random.seed(0)

# get IoU overlap ratio

def iou(a, b):

# get area of a

area_a = (a[2] - a[0]) * (a[3] - a[1])

# get area of b

area_b = (b[2] - b[0]) * (b[3] - b[1])

# get left top x of IoU

iou_x1 = np.maximum(a[0], b[0])

# get left top y of IoU

iou_y1 = np.maximum(a[1], b[1])

# get right bottom of IoU

iou_x2 = np.minimum(a[2], b[2])

# get right bottom of IoU

iou_y2 = np.minimum(a[3], b[3])

# get width of IoU

iou_w = iou_x2 - iou_x1

# get height of IoU

iou_h = iou_y2 - iou_y1

# get area of IoU

area_iou = iou_w * iou_h

# get overlap ratio between IoU and all area

iou = area_iou / (area_a + area_b - area_iou)

return iou

# crop and create database

def crop_bbox(img, gt, Crop_N=200, L=60, th=0.5):

# get shape

H, W, C = img.shape

# each crop

for i in range(Crop_N):

# get left top x of crop bounding box

x1 = np.random.randint(W - L)

# get left top y of crop bounding box

y1 = np.random.randint(H - L)

# get right bottom x of crop bounding box

x2 = x1 + L

# get right bottom y of crop bounding box

y2 = y1 + L

# crop bounding box

crop = np.array((x1, y1, x2, y2))

# get IoU between crop box and gt

_iou = iou(gt, crop)

# assign label

if _iou >= th:

cv.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 1)

label = 1

else:

cv.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 1)

label = 0

return img

# read image

img = cv.imread("../xiyi.jpg")

img1 = img.copy()

# gt bounding box

gt = np.array((87, 51, 169, 113), dtype=np.float32)

# get crop bounding box

img = crop_bbox(img, gt, Crop_N=100, L=60, th=0.6)

# draw gt

cv.rectangle(img, (gt[0], gt[1]), (gt[2], gt[3]), (0,255,0), 1)

cv.rectangle(img1,(gt[0], gt[1]), (gt[2], gt[3]), (0,255,0), 1)

cv.imshow("result1",img1)

cv.imshow("result", img)

cv.imwrite("out.jpg", img)

cv.waitKey(0)

cv.destroyAllWindows()

实验结果:

以上是 python实现图像随机裁剪的示例代码 的全部内容, 来源链接: utcz.com/z/356434.html

回到顶部