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 相关文章推荐
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
Python Pandas常用函数方法总结
Jun 15 Python
pycharm代码删除恢复的方法
Jun 26 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 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实现文件编码批量转换
2014/03/10 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
详解python做UI界面的方法
2019/02/27 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python面向对象实现方法总结
2020/08/12 Python
Python Http请求json解析库用法解析
2020/11/28 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
explicit和implicit的含义
2012/11/15 面试题
新闻记者个人求职的自我评价
2013/11/28 职场文书
关爱留守儿童标语
2014/06/18 职场文书
办公用房租赁协议书
2014/11/29 职场文书
工程合作意向书范本
2015/05/09 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers