前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >图像随机裁剪

图像随机裁剪

作者头像
裴来凡
发布2022-05-29 10:10:44
发布2022-05-29 10:10:44
1.5K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
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比对原始区域用绿框标出。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档