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中的__SLOTS__属性使用示例
Feb 18 Python
python检测远程服务器tcp端口的方法
Mar 14 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
在Linux下调试Python代码的各种方法
Apr 17 Python
Python实现命令行通讯录实例教程
Aug 18 Python
Python计时相关操作详解【time,datetime】
May 26 Python
python assert的用处示例详解
Apr 01 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
如何正确理解python装饰器
Jun 15 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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实现汉字验证码和算式验证码的方法
2015/03/07 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
Python操作MySQL数据库9个实用实例
2015/12/11 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
浅析python内置模块collections
2019/11/15 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
《阳光》教学反思
2014/02/23 职场文书
创新社会管理心得体会
2014/09/12 职场文书
师德师风个人总结
2015/02/06 职场文书
师德承诺书2015
2015/04/28 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
护士医德医风心得体会
2016/01/25 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python