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多线程编程(八):使用Event实现线程间通信
Apr 05 Python
python3 爬取图片的实例代码
Nov 06 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
Python趣味挑战之实现简易版音乐播放器
May 28 Python
python cv2图像质量压缩的算法示例
Jun 04 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 8小时时间差的解决方法小结
2009/12/22 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
理解javascript异步编程
2016/01/27 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
Python模拟登陆实现代码
2017/06/14 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
python使用selenium实现批量文件下载
2019/03/11 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
黄继光的英雄事迹材料
2014/02/13 职场文书
总经理的岗位职责
2014/02/23 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
感恩教育主题班会
2015/08/12 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python