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在校内发人人网状态(人人网看状态)
Feb 19 Python
python中base64加密解密方法实例分析
May 16 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
python导入pandas具体步骤方法
Jun 23 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
python同步两个文件夹下的内容
Aug 29 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
python selenium xpath定位操作
Sep 01 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Python项目跨域问题解决方案
2020/06/22 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
Django视图、传参和forms验证操作
2020/07/15 Python
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
我的画教学反思
2014/04/28 职场文书
小学生成绩单评语
2014/12/31 职场文书
创先争优承诺书
2015/01/20 职场文书
面试通知短信
2015/04/20 职场文书
大一新生军训新闻稿
2015/07/17 职场文书