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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
python实现将html表格转换成CSV文件的方法
Jun 28 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
python list元素为tuple时的排序方法
Apr 18 Python
python简易远程控制单线程版
Jun 20 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
对Python 字典元素进行删除的方法
Jul 31 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
php实现加减法验证码代码
2014/02/14 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python shelve模块实现解析
2019/08/28 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
家长给小学生的评语
2014/01/30 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
考试没考好检讨书
2015/05/06 职场文书
建筑工程催款函
2015/06/24 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
css样式important规则的正确使用方式
2022/06/10 HTML / CSS
js作用域及作用域链工作引擎
2022/07/07 Javascript