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编写一个简单的Lisp解释器的教程
Apr 03 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python操作json的方法实例分析
Dec 06 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
Django ORM filter() 的运用详解
May 14 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
python 实现超级玛丽游戏
Nov 25 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函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
Javascript 解疑
2009/11/11 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python数据分析之如何利用pandas查询数据示例代码
2017/09/01 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
Python简单实现区域生长方式
2020/01/16 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
优秀广告词大全
2014/03/19 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
信访工作汇报材料
2014/10/27 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
欧元符号 €
2022/02/17 杂记