在深度学习中,模型的输入size通常是正方形尺寸的,比如300 x 300这样.直接resize的话,会把图像拉的变形.通常我们希望resize以后仍然保持图片的宽高比.

例如:

如果直接resize到的话:

而我们希望得到:

可以利用copyMakeBorder和resize配合达到我们的目的.

import cv2
def resize_keep_aspectratio(image_src,dst_size):
src_h,src_w = image_src.shape[:2]
print(src_h,src_w)
dst_h,dst_w = dst_size #判断应该按哪个边做等比缩放
h = dst_w * (float(src_h)/src_w)#按照w做等比缩放
w = dst_h * (float(src_w)/src_h)#按照h做等比缩放 h = int(h)
w = int(w) if h <= dst_h:
image_dst = cv2.resize(image_src,(dst_w,int(h)))
else:
image_dst = cv2.resize(image_src,(int(w),dst_h)) h_,w_ = image_dst.shape[:2]
print(h_,w_) top = int((dst_h - h_) / 2);
down = int((dst_h - h_+1) / 2);
left = int((dst_w - w_) / 2);
right = int((dst_w - w_+1) / 2); value = [0,0,0]
borderType = cv2.BORDER_CONSTANT
print(top, down, left, right)
image_dst = cv2.copyMakeBorder(image_dst, top, down, left, right, borderType, None, value) return image_dst image_src = cv2.imread("/home/sc/disk/data/bdd-data/bdd_data/bdd100k/images/10k/train/0a0a0b1a-7c39d841.jpg")
dst_size = (720,720) image = resize_keep_aspectratio(image_src,dst_size)
cv2.imshow("aaa",image)
print(image.shape)
if 27 == cv2.waitKey():
cv2.destroyAllWindows()

首先判断应该用w,h哪个方向的长度做等比缩放,缩放到合适的尺寸后,在用copyMakeBorder对剩余像素进行填充.深度学习中通常用灰度值128进行边界的填充.以文章开头的图片为例,处理后得到的图片:

最新文章

  1. git配置ssh(github)
  2. select,poll,epoll比较
  3. [代码]label增加删除线
  4. ajax返回数据类型为XML数据的处理
  5. js windows对象
  6. 删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
  7. 【Spring-AOP-1】AOP相关概念
  8. HTML readyState 属性 iframe onreadystatechange事件
  9. JDBC链接MySQL和Oracle
  10. zend studio插件
  11. 用NodeJs实现优先级队列PQueue
  12. linux之utime函数解析
  13. Android博客
  14. 【OpenGL游戏开发之二】OpenGL常用API
  15. qt5 connect问题
  16. linux 下令chmod 755的意思
  17. 三、Kubernetes之深入了解Pod
  18. tomcat8w.exe 运行 提示 指定的服务未安装 unable to open the service &#39;tomcat8&#39;
  19. MySQL Disk--SSD与RAID
  20. myBatis调用postgreSQL存储过程

热门文章

  1. 用Python将处理数据得到的csv文件分类(按顺序)保存
  2. kali更新源地址更改
  3. 解决 Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException: XXXCriteria$Criterion.noValue
  4. jQuery选择器 大于 空格 波浪线 加号
  5. Java基础(三十二)JDBC(2)连接数据库
  6. windows一键还原,阴影卷创建报错,shadowcopy error - User Imposed Limit
  7. java中的Static、final、Static final各种用法详解
  8. SOLID原则、设计模式适用于Python语言吗
  9. 在SpringBoot中使用flyway进行数据库版本管理
  10. Hibernate 查询方式、JPA查询方式