opencv resize图片为正方形尺寸的实现方法
作者:core! 时间:2023-02-21 15:34:51
在深度学习中,模型的输入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进行边界的填充.以文章开头的图片为例,处理后得到的图片:
来源:https://www.cnblogs.com/sdu20112013/p/11949748.html
标签:opencv,resize,图片尺寸
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2021-07-23 01:24:36
MySQL5.7.21安装与密码图文配置教程
2024-01-14 16:33:10
![](https://img.aspxhome.com/file/2023/7/128047_0s.jpg)
Python中如何将一个类方法变为多个方法
2022-10-10 02:01:47
![](https://img.aspxhome.com/file/2023/2/118762_0s.jpg)
python基于itchat模块实现微信防撤回
2022-03-15 01:41:42
Vue3中简单实现动态添加路由
2023-07-02 16:58:45
![](https://img.aspxhome.com/file/2023/3/139863_0s.png)
JavaScript编写棋盘覆盖代码详解
2024-04-17 10:30:05
![](https://img.aspxhome.com/file/2023/4/136264_0s.png)
Pycharm学习教程(2) 代码风格
2022-03-21 08:38:31
![](https://img.aspxhome.com/file/2023/6/101506_0s.png)
PyQt+socket实现远程操作服务器的方法示例
2022-07-19 01:56:13
![](https://img.aspxhome.com/file/2023/3/107643_0s.png)
MySQL中使用case when 语句实现多条件查询的方法
2024-01-16 17:17:31
如何利用Python写猜数字和字母的游戏
2021-01-28 00:00:09
![](https://img.aspxhome.com/file/2023/8/101258_0s.png)
pytorch: Parameter 的数据结构实例
2022-10-19 22:28:22
Python的多态性实例分析
2023-04-15 04:37:18
跟老齐学Python之变量和参数
2023-01-12 22:23:31
红黑树的插入详解及Javascript实现方法示例
2024-04-19 11:03:13
![](https://img.aspxhome.com/file/2023/0/136240_0s.png)
使用docker构建golang线上部署环境的步骤详解
2024-04-25 13:16:44
![](https://img.aspxhome.com/file/2023/5/134355_0s.jpg)
Python中的startswith和endswith函数使用实例
2022-06-19 00:47:55
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021-11-13 16:52:41
![](https://img.aspxhome.com/file/2023/4/130834_0s.jpg)
Windows7下安装使用MySQL8.0.16修改密码、连接Navicat问题
2024-01-15 08:58:26
go语言同步教程之条件变量
2024-05-05 09:26:34
静态网页加密工具
2009-01-05 12:05:00