实验条件:
- 从1张图像随机裁剪100张图像
- 裁剪出图像的大小为 60 x 60
- IoU 大于等于 th=0.6 的裁剪框用红色标出,其它裁剪框用蓝色标出
- IoU 比对原始区域用绿框标出
实验代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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实现图像随机裁剪的示例代码的详细内容,更多关于python 图像裁剪的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/wojianxin/p/12581240.html