opencv resize图片为正方形尺寸的实现方法


Posted in Python onDecember 26, 2019

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

例如:

opencv resize图片为正方形尺寸的实现方法

如果直接resize到的话:

opencv resize图片为正方形尺寸的实现方法

而我们希望得到:

opencv 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进行边界的填充.以文章开头的图片为例,处理后得到的图片:

opencv resize图片为正方形尺寸的实现方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python调用cmd复制文件代码分享
Dec 27 Python
pyqt4教程之widget使用示例分享
Mar 07 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
python查看微信好友是否删除自己
Dec 19 Python
python docx 中文字体设置的操作方法
May 08 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
python3实现猜数字游戏
Dec 07 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
python 读取、写入txt文件的示例
Sep 27 Python
PyQt实现计数器的方法示例
Jan 18 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
opencv之为图像添加边界的方法示例
Dec 26 #Python
Python 过滤错误log并导出的实例
Dec 26 #Python
python3 pathlib库Path类方法总结
Dec 26 #Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 #Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 #Python
基于h5py的使用及数据封装代码
Dec 26 #Python
python深copy和浅copy区别对比解析
Dec 26 #Python
You might like
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
js下弹出窗口的变通
2007/04/18 Javascript
表单元素事件 (Form Element Events)
2009/07/17 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
基于python requests库中的代理实例讲解
2018/05/07 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
基于python实现雪花算法过程详解
2019/11/16 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
在python中修改.properties文件的操作
2020/04/08 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
美国购物网站:Clickhere2shop
2021/01/28 全球购物
篮球社团活动总结
2014/06/27 职场文书
目标责任书格式
2014/07/28 职场文书
2015年物流客服工作总结
2015/07/27 职场文书