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中MYSQLdb出现乱码的解决方法
Oct 11 Python
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Python Socket使用实例
Dec 18 Python
聊聊Python中的pypy
Jan 12 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
python 字典的打印实现
Sep 26 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
python 制作本地应用搜索工具
Feb 27 Python
Python深度学习之Pytorch初步使用
May 20 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
thinkphp特殊标签用法概述
2014/11/24 PHP
Prototype Template对象 学习
2009/07/19 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
实例讲解Python中的私有属性
2014/08/21 Python
Python的gevent框架的入门教程
2015/04/29 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
详解Python字典的操作
2019/03/04 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
关于期中考试的反思
2014/02/02 职场文书
益达广告词
2014/03/14 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
期末个人总结范文
2015/02/13 职场文书
2015员工年度考核评语
2015/03/25 职场文书
今日说法观后感
2015/06/08 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
Python 循环读取数据内存不足的解决方案
2021/05/25 Python
golang中字符串MD5生成方式总结
2021/07/04 Golang
win10清理dns缓存
2022/04/19 数码科技
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js