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的Collections模块中counter结构的用法
Jul 07 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python super()函数使用及多重继承
May 06 Python
django下创建多个app并设置urls方法
Aug 02 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
destoon之一键登录设置
2014/06/21 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
在windows系统中实现python3安装lxml
2016/03/23 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python判断元素是否存在的实例方法
2020/09/24 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
优秀女职工事迹材料
2014/02/06 职场文书
2014离婚协议书范文
2014/09/10 职场文书
求职自我评价范文100字
2014/09/23 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Python集合set()使用的方法详解
2022/03/18 Python
Django基础CBV装饰器和中间件
2022/03/22 Python
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS