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 16 Python
python判断windows系统是32位还是64位的方法
May 11 Python
Python提取网页中超链接的方法
Sep 18 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python实现扫描日志关键字的示例
Apr 28 Python
Python实现的质因式分解算法示例
May 03 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
python对象与json相互转换的方法
May 07 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
关于Kotlin中SAM转换的那些事
Sep 15 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 MVC框架路由学习笔记
2016/03/02 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
TopList标签和JavaScript结合两例
2007/08/12 Javascript
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
JS中的BOM应用
2018/02/02 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
主管职责范文
2013/11/09 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
跳高加油稿
2015/07/21 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
Linux安装Docker详细教程
2022/07/07 Servers