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异常处理慎用“except:pass”建议
Apr 02 Python
Python实现二叉搜索树
Feb 03 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
python常用数据重复项处理方法
Nov 22 Python
解决Python3下map函数的显示问题
Dec 04 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 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
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
php jsonp单引号转义
2014/11/23 PHP
php处理带有中文URL的方法
2016/07/11 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
通过Python 接口使用OpenCV的方法
2018/04/02 Python
Python中logging实例讲解
2019/01/17 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Python实现数字的格式化输出
2020/08/01 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
请解释在new与override的区别
2012/10/29 面试题
params有什么用
2016/03/01 面试题
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
python基于机器学习预测股票交易信号
2021/05/25 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
详解Python中*args和**kwargs的使用
2022/04/07 Python