opencv resize图片为正方形尺寸
2024-09-01 16:16:46
在深度学习中,模型的输入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进行边界的填充.以文章开头的图片为例,处理后得到的图片:
最新文章
- git配置ssh(github)
- select,poll,epoll比较
- [代码]label增加删除线
- ajax返回数据类型为XML数据的处理
- js windows对象
- 删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
- 【Spring-AOP-1】AOP相关概念
- HTML readyState 属性 iframe onreadystatechange事件
- JDBC链接MySQL和Oracle
- zend studio插件
- 用NodeJs实现优先级队列PQueue
- linux之utime函数解析
- Android博客
- 【OpenGL游戏开发之二】OpenGL常用API
- qt5 connect问题
- linux 下令chmod 755的意思
- 三、Kubernetes之深入了解Pod
- tomcat8w.exe 运行 提示 指定的服务未安装 unable to open the service &#39;tomcat8&#39;
- MySQL Disk--SSD与RAID
- myBatis调用postgreSQL存储过程
热门文章
- 用Python将处理数据得到的csv文件分类(按顺序)保存
- kali更新源地址更改
- 解决 Mybatis报错org.apache.ibatis.ognl.NoSuchPropertyException: XXXCriteria$Criterion.noValue
- jQuery选择器 大于 空格 波浪线 加号
- Java基础(三十二)JDBC(2)连接数据库
- windows一键还原,阴影卷创建报错,shadowcopy error - User Imposed Limit
- java中的Static、final、Static final各种用法详解
- SOLID原则、设计模式适用于Python语言吗
- 在SpringBoot中使用flyway进行数据库版本管理
- Hibernate 查询方式、JPA查询方式