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访问纯真IP数据库的代码
May 19 Python
Python 字典dict使用介绍
Nov 30 Python
Python实现统计单词出现的个数
May 28 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python3如何解决字符编码问题详解
Apr 23 Python
python版学生管理系统
Jan 10 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
python返回数组的索引实例
Nov 28 Python
Python对wav文件的重采样实例
Feb 25 Python
Python ellipsis 的用法详解
Nov 20 Python
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
May 14 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数字格式化
2006/12/06 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
Git命令之分支详解
2021/03/02 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
python3中int(整型)的使用教程
2017/03/23 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
python中turtle库的简单使用教程
2020/11/11 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
优秀员工自荐书
2013/12/19 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
Python制作动态字符画的源码
2021/08/04 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL