import cv2
import numpy as np
np.random.seed(0)
#IoU
def iou(a, b):
area_a=(a[2]-a[0])*(a[3]-a[1])
area_b=(b[2]-b[0])*(b[3]-b[1])
iou_x1=np.maximum(a[0],b[0])
iou_y1=np.maximum(a[1],b[1])
iou_x2=np.minimum(a[2],b[2])
iou_y2=np.minimum(a[3],b[3])
#IoU宽度
iou_w=iou_x2-iou_x1
#IoU高度
iou_h=iou_y2-iou_y1
#IoU面积
area_iou=iou_w*iou_h
iou=area_iou/(area_a+area_b-area_iou)
return iou
#图像裁剪
def crop_bbox(img,gt,Crop_N=200,L=60,th=0.5):
H,W,C=img.shape
for i in range(Crop_N):
x1=np.random.randint(W-L)
y1=np.random.randint(H-L)
x2=x1+L
y2=y1+L
crop=np.array((x1,y1,x2,y2))
_iou=iou(gt,crop)
#标签
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
img=cv2.imread("C:/Users/xpp/Desktop/Lena.png")
cv2.imshow("original",img)
img1=img.copy()
gt=np.array((87,51,169,113),dtype=np.float32)
img=crop_bbox(img,gt,Crop_N=100,L=60,th=0.6)
cv2.rectangle(img,(gt[0],gt[1]),(gt[2],gt[3]),(0,255,0),1)
cv2.rectangle(img1,(gt[0],gt[1]),(gt[2],gt[3]),(0,255,0),1)
cv2.imshow("result01",img1)
cv2.imshow("result02",img)
cv2.imwrite("C:/Users/xpp/Desktop/result3.png",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
算法:图像随机裁剪是从1张图像随机裁剪200张图像,裁剪出图像的大小为 60x60,IoU大于等于th=0.5的裁剪框用红色标出,其它裁剪框用蓝色标出,IoU比对原始区域用绿框标出。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!