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获取标准北京时间的方法
Mar 24 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
分享Python开发中要注意的十个小贴士
Aug 30 Python
python学习入门细节知识点
Mar 29 Python
Python查找第n个子串的技巧分享
Jun 27 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
Python input函数使用实例解析
Nov 22 Python
Python如何定义有默认参数的函数
Aug 10 Python
Python matplotlib绘制雷达图
Apr 13 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 gd等比例缩放压缩图片函数
2016/06/12 PHP
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
前台接待岗位职责
2013/12/03 职场文书
安全生产检查通报
2014/01/29 职场文书
粗加工管理制度
2014/02/04 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
年会邀请函范文
2015/01/30 职场文书
火烧圆明园观后感
2015/06/03 职场文书
贷款工作证明模板
2015/06/12 职场文书
开学典礼观后感
2015/06/15 职场文书
冰雪公主观后感
2015/06/16 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript