文章目录

  • 1、不考虑crop后物体与crop前的IoU:
  • 2、考虑crop后物体与crop前的IoU:
  • 3、IoU代码:

1、不考虑crop后物体与crop前的IoU:

def crop_im_annos(self, data):pim = cv2.imread(data["filename"])height, width = pim.shape[0:2]lugg_anno = copy.deepcopy(data["luggage_annos"])if len(data["luggage_annos"]) > 1:  # "pedestrain_annos" in data.keys():ped_anno = copy.deepcopy(data["pedestrain_annos"])ped_box = [ped_anno["x"], ped_anno["y"], ped_anno["x"] + ped_anno["width"] - 1,ped_anno["y"] + ped_anno["height"] - 1]left_xcoord = max(0, ped_anno["x"] - 0.65 * ped_anno["width"])right_xcoord = min(width, ped_anno["x"] + ped_anno["width"] - 1 + 0.65 * ped_anno["width"])right_ycoord = min(height,ped_anno["y"] + ped_anno["height"] - 1 + 0.15 * ped_anno["height"])  # todo 0.05->0.15pim = pim[int(ped_anno["y"]):int(right_ycoord), int(left_xcoord):int(right_xcoord)]for la in lugg_anno:offset = la["x"] - left_xcoordla["x"] = max(0, offset)la["y"] = max(0, la["y"] - ped_anno["y"])if la["x"] > ped_anno["x"] - left_xcoord:la["width"] = min(la["width"], (right_xcoord - left_xcoord) - la["x"])la["height"] = min(la["height"], (right_ycoord - ped_anno["y"]) - la["y"])else:if la["x"] == 0:la["width"] = la["width"] + offsetla["height"] = min(la["height"], (right_ycoord - ped_anno["y"]) - la["y"])return pim, lugg_anno

2、考虑crop后物体与crop前的IoU:

def crop_im_annos(self, data):pim = cv2.imdecode(np.fromfile(data["filename"]), 1)if pim is None:pim = cv2.imread(data["filename"], 1)anno = copy.deepcopy(data["annotations"])height, width = pim.shape[0:2]if len(data["pedes_annotations"]) > 0:  # 对有持刀的图片进行cropped_anno = copy.deepcopy(data["pedes_annotations"])[0]knife_anno = copy.deepcopy(data["knife_annotations"])[0]ped_box = [ped_anno["x"], ped_anno["y"], ped_anno["x"] + ped_anno["width"] - 1,ped_anno["y"] + ped_anno["height"] - 1]left_xcoord = max(0, ped_anno["x"] - 0.25 * ped_anno["width"])right_xcoord = min(width, ped_anno["x"] + ped_anno["width"] - 1 + 0.25 * ped_anno["width"])left_ycoord = max(0,ped_anno["y"] - 0.15 * ped_anno["height"])res_pim = pim[int(left_ycoord):int(ped_anno["y"] + ped_anno["height"]), int(left_xcoord):int(right_xcoord)]for i, s_anno in enumerate(anno):s_anno["x1"] = s_anno["x"]s_anno["y1"] = s_anno["y"]s_anno["x2"] = s_anno["x"] + s_anno["width"] - 1s_anno["y2"] = s_anno["y"] + s_anno["height"] - 1s_anno["x1"] = max(0, s_anno["x1"] - left_xcoord)s_anno["y1"] = max(0, s_anno["y1"] - left_ycoord)s_anno["x2"] = min(right_xcoord - left_xcoord, s_anno["x2"] - left_xcoord)s_anno["y2"] = max(0, s_anno["y2"] - left_ycoord)g_anno_w = data["annotations"][i]["width"]g_anno_h = data["annotations"][i]["height"]s_anno_w = s_anno["x2"] - s_anno["x1"]s_anno_h = s_anno["y2"] - s_anno["y1"]# 判断crop图片后的物体与crop图片前的物体IoU,如果IoU<0.7则做进一步的处理if s_anno_w * s_anno_h / g_anno_w * g_anno_h > 0.7:s_anno["x"] = s_anno["x1"]s_anno["y"] = s_anno["y1"]s_anno["width"] = s_anno["x2"] - s_anno["x1"]s_anno["height"] = s_anno["y2"] - s_anno["y1"]else:if knife_anno["x"] > ped_anno["x"]:for s_pb in ped_box:ped_box[0] = max(0, min(ped_box[0], s_pb["x"]))ped_box[1] = max(0, min(ped_box[1], s_pb["y"]))ped_box[2] = min(pim.shape[1] - 1, max(ped_box[2], s_pb["x"] + s_pb["width"] - 1))ped_box[3] = min(pim.shape[0] - 1, max(ped_box[3], s_pb["y"] + s_pb["height"] - 1))ped_box = [int(b) for b in ped_box]res_pim = pim[ped_box[1]:ped_box[3], int(left_xcoord):ped_box[2]]for sa in anno:sa["x"] -= ped_box[0]sa["y"] -= left_xcoordelse:for s_pb in ped_box:ped_box[0] = max(0, min(ped_box[0], s_pb["x"]))ped_box[1] = max(0, min(ped_box[1], s_pb["y"]))ped_box[2] = min(pim.shape[1] - 1, max(ped_box[2], s_pb["x"] + s_pb["width"] - 1))ped_box[3] = min(pim.shape[0] - 1, max(ped_box[3], s_pb["y"] + s_pb["height"] - 1))ped_box = [int(b) for b in ped_box]res_pim = pim[ped_box[1]:ped_box[3], ped_box[0]:int(right_xcoord)]for sa in anno:sa["x"] -= ped_box[0]sa["y"] -= ped_box[1]return res_pim, anno

3、IoU代码:

def IoU(self, boxA, boxB):boxA = [int(x) for x in boxA]boxB = [int(x) for x in boxB]xA = max(boxA[0], boxB[0])yA = max(boxA[1], boxB[1])xB = min(boxA[2], boxB[2])yB = min(boxA[3], boxB[3])interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)iou = interArea / float(boxAArea + boxBArea - interArea)return iou

crop图片后,同时修改物体相应的坐标相关推荐

  1. http sxyk.cdn_Discuz x3 开启cdn和https后链接修改教程

    Discuz x3 开启cdn和https后链接修改教程 开启支持https主要需要修改一下几个地方 1. .查找修改文件discuz_application.PHP :source/class/di ...

  2. 鼠标移至图片后抖动的JS代码

    代码简介: 仿QQ的窗口抖动特效,鼠标移到到图片上面,图片就开始疯狂的抖动,好像对你的鼠标过敏一样,比较有意思,有会你的网页增加了修改功能. 代码内容: View Code <html>& ...

  3. ios 图片裁剪框架_iOS 图片裁剪与修改

    最近做的项目中需要上传头像,发表内容的时候也要涉及到图片上传,我直接用的原图上传,但是由于公司网络差,原图太大,老是加载好久好久,所以需要把原图裁剪或者修改分辨率之后再上传,找了好久,做了很多尝试才解 ...

  4. ReSharper未按照预期路径安装后如何修改(Windows 找不到“C:\Program Files (x86)\JetBrains\Installations”。请检查拼写并重试)

    ReSharper未按照预期路径安装后如何修改文章末尾有资源 Windows 找不到![在这里插入图片描述](https://img-blog.csdnimg.cn/20210701110824791 ...

  5. PDF转成Word或PPT后不能修改的原因和解决方法

    现在很多文档都是用PDF格式,虽然查看比较方便,但编辑起来相对麻烦,所以我们经常会将PDF转换成Word或者PPT后再修改,但是有时候无论转成Word或PPT都还是不能修改是怎么回事呢?要怎么解决呢? ...

  6. 怎么用电脑修改图片尺寸?图片大小尺寸修改教程

    在平时生活中,随着现在的数码设备发展,拍摄的照片越来越清楚,像素越来越高,但是像素高的照片体积也就越大,在网上使用这些照片素材或者发送某些高清图片文件的时候都会遇到图片过大无法使用的情况,有的会注明要 ...

  7. 怎么修改原图片的尺寸?图片尺寸在线修改工具分享

    平时经常会遇到图片尺寸过大导致无法上传的问题,其实可以通过图片尺寸修改(https://www.yasuotu.com/size)来解决,下面给大家分享一款图片尺寸在线修改工具,打开浏览器即可改图片大 ...

  8. windows默认文件(桌面、下载、文档等)设置为C盘根路径后怎么修改回去

    桌面.下载.文档等设置为C盘根路径后怎么修改回去 1.问题 2.解决办法 2.1.按`Win + R`调出运行窗口,输入`regedit`并按回车. 2.2.在弹出的注册表窗口里,打开下面路径`计算机 ...

  9. 图片分辨率如何修改?改图片分辨率的方法

    在很多图片上传平台,都会对图片分辨率有具体要求,但是我们拍摄的图片都只有96dpi,需要使用专业的改图片分辨率去修改图片分辨率(https://www.yasuotu.com/dpi).下面推荐一个可 ...

最新文章

  1. MySQL如何快速插入数据
  2. NeurIPS 2021 | 视觉Transformer和CNN看到的特征是相同的吗?谷歌大脑新作
  3. php vendor 删除,yii2我删除了vendor目录,然后重新composer install composer update就不行了。。。...
  4. php多线程 mysql_php通过共享内存,控制mysql连接数,多进程插入数据(pcnt学习四)...
  5. mate10的html5跑分,麒麟970逆天!华为Mate10跑分首曝:媲美骁龙835
  6. Nginx配置指定媒体类型文件强制下载
  7. 未结束的字符文字_PAT B1042:字符统计
  8. 国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?
  9. 曾陷“数据风暴”危机的赛默飞世尔如何化险为夷的?
  10. CodeForces - 937D Sleepy Game
  11. 《信号与系统》(吴京)部分课后习题答案与解析——第一章
  12. 一篇文章掌握整个JVM,JVM超详细解析。【持续更新 康师傅yyds】
  13. CMSIS RTOS API,内核通用API接口
  14. 2分钟搞定收货地址三级联动,数据易于维护,更新。
  15. 华光职业学院计算机专业,关于给予张庆俊等同学省高校计算机一级 考试成绩优秀奖励的通知...
  16. adb和夜神模拟器安装
  17. 从零开始之uboot、移植uboot2017.01(三、lowlevel_init)
  18. Excel使用空格/逗号等对数据进行分列
  19. 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
  20. 《NEURAL READING COMPREHENSION AND BEYOND》解读(陈丹琦博士论文)

热门文章

  1. CSS3-KeyFrames
  2. APP推广和统计黑科技:shareinstall让你有如神助!
  3. 解决无字幕问题--射手影音VS迅雷影音
  4. 计算机专业可以跨考农学吗,农学适合跨考哪些专业
  5. 前尘往事入梦来 - IT十年回首
  6. Qt数据库应用23-个人信息报表
  7. 使用python导出msc.marc后处理数据——PyPost介绍
  8. 前后加编码_如何不加思考地编码?
  9. 利用 OpenWrt 共享局域网下的佳能 MG2580s/MX398打印扫描一体机
  10. maya2018拓扑功能实现