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实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
python实现猜单词小游戏
May 22 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
通过cmd进入python的实例操作
Jun 26 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
python在协程中增加任务实例操作
Feb 28 Python
pytorch实现ResNet结构的实例代码
May 17 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
科室工作的个人自我评价
2013/10/30 职场文书
行政主管职责范本
2014/03/07 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
公司出纳岗位职责
2015/03/31 职场文书