实验条件:
- 从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