首页 > 其他分享 >opencv resize

opencv resize

时间:2022-09-19 20:26:04浏览次数:43  
标签:img cv2 opencv dsize INTER cv resize

# -*- coding: utf-8 -*-
'''
今天来看看opencv中的resize方法。
就打个tag: opencv resize 
先看看官方定义
void cv::resize	(	InputArray 	src,
OutputArray 	dst,
Size 	dsize,
double 	fx = 0,
double 	fy = 0,
int 	interpolation = INTER_LINEAR 
)		

Python:
dst	=	cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]	)
各个参数可以参考c++版本的数据类型。简单解释如下:
参数	类型	是否必须指定	具体含义
src	numpy.ndarray	是	     原图像
dsize	tuple<int>	是	     缩放后的图像大小
dst  	无所谓	 否	          目标图像,但是在 Python 里面没有任何意义。一般不传参或者设成 None
fx, fy	数值类型	否	    x 和 y 方向上的缩放比例
interpolation	int	否	插值方式表示代码,本质是一个 int 数值,一般用 OpenCV 内置的参数代号以提高可读性。
具体可以参考官方的这个解释:
enum  	cv::InterpolationFlags {
  cv::INTER_NEAREST = 0,
  cv::INTER_LINEAR = 1,
  cv::INTER_CUBIC = 2,
  cv::INTER_AREA = 3,
  cv::INTER_LANCZOS4 = 4,
  cv::INTER_LINEAR_EXACT = 5,
  cv::INTER_NEAREST_EXACT = 6,
  cv::INTER_MAX = 7,
  cv::WARP_FILL_OUTLIERS = 8,
  cv::WARP_INVERSE_MAP = 16
}

因此在使用时,可以写代号也可以写出来方法名字。
使用方法从参数来看,可以设置resize后图像的大小,也可以通过设置方法比例进行resize。
从参数列别可以看到,参数src, dsize是必须有的参数,后面的参数都是可选,或者是有默认值的参数。因此,就是你指定了fx,fy,也必须
同时给dsize赋值(可以为None),否则会报错。但是当你指定dsize的大小了,可以不用管fx,fy.
此处要特别注意,从参数顺序就能看到,此处显示x方向再是y方向的,也就是说先是宽度,再是高度。
此处主要还是要看官方的一个地方是参数的设置,
To shrink an image, it will generally look best with INTER_AREA interpolation, whereas to enlarge an image, 
it will generally look best with c::INTER_CUBIC (slow) or INTER_LINEAR (faster but still looks OK).
这里的意思是,如果resize后,图像变小了,推荐插值算法用INTER_AREA,而如果resize后,图像大小变大了,推荐用INTER_LINEAR或者慢点
但是效果更好的方式INTER_CUBIC (slow)。因此,如果你确定大多数图像resize前后都是增大还是减小,那就可以相应选择对应的插值方法。
'''


'''
first, let me see the img shape. When you using img.shape, it is height, width, channel. Remember this. 
'''
import numpy as np
import cv2
img = cv2.imread(r"messi.jpg")
print('origin image',img.shape) # (296, 474, 3)  in height, width, channel
cv2.imshow("messi", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

rimg = cv2.resize(img,dsize=None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR)# 放大了两倍,此处dsize不可以省略,必须指定的参数
cv2.imshow("resize messi", rimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

rwidth = img.shape[1]*2
rheight = img.shape[0]*2
# 放大了两倍,此处dsize必须是先width再height.
rimg2 = cv2.resize(img,dsize=(rwidth, rheight),interpolation=cv2.INTER_LINEAR)
cv2.imshow("resize messi2", rimg2)
cv2.waitKey(0)
cv2.destroyAllWindows()


# 当dsize和fx,fy不一致,而且两者又都是有效的,优先选择dsize作为参数,而忽略fx,fy。
rwidth = img.shape[1]*3
rheight = img.shape[0]*3
rimg3 = cv2.resize(img,dsize=(rwidth, rheight),fx=1,fy=1,interpolation=cv2.INTER_LINEAR)
cv2.imshow("resize messi3", rimg2)
print ('resize image: ',rimg3.shape) # (888, 1422, 3)
cv2.waitKey(0)
cv2.destroyAllWindows()

  

标签:img,cv2,opencv,dsize,INTER,cv,resize
From: https://www.cnblogs.com/jianyingzhou/p/16708920.html

相关文章

  • 霍夫变换原理及实现(Opencv C++)
    已知一幅图像中的n个点,假设我们希望找到这些点中位于直线上的子集。一种可能的解决方法是,首先找到由每对点确定的所有直线,然后寻找靠近特定直线的那些点的所有子集。这种方......
  • opencv学习笔记(3)
    opencv的色彩空间一、RGB与BGRRGB即red(红色)、green(绿色)、blue(蓝色)。RGB与BGR只是三个通道的顺序不同,其他并无差别,三个通道值的范围是0~255。在opencv中的色彩空间默认为B......
  • 基础部分之numpy 调整数组维度 resize
    调整数组维度resize用法resize(numpy.ndarray,axes=[])axes:必须参数,修改维度,给出每个维度的长度实例:IPython交互>>>importnumpyasnp>>>a=np.arange(16)......
  • c# 引入同一个版本dll(比如包含opencv不同模块的dll,但是版本却是一致的)
    1.使用dnSpy.exe工具,打开相关dll  在左侧"管理器"中选中并点击右键2.在弹出菜单中点击编辑程序集3.更改名称和版本号 4.工具栏-文件-全部保存5.在VS中引入dll......
  • 代码笔记24 windows+opencv4.5.5安装中出现的IPPICV: Download: ippicv_2020_win_inte
    1环境介绍:windows10,visualstudio2019,CMake,OPENCV4.5.5出现问题IPPICV:Download:ippicv_2020_win_intel64_20191018_general.zipTry1failedCMakeWarninga......
  • C++ vector的reserve和resize详解
    vector的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下:     reserve是容器预留空间,但在空间......
  • opencv -- reshape()函数
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。函数原型:C++:MatMat::reshape(intcn,introws=0)const......
  • 构建计算机视觉 WebApp — Flask、OpenCV 和 MongoDB
    构建计算机视觉WebApp—Flask、OpenCV和MongoDB作为一名数据科学家,具备一些软件工程技能已成为就业市场中一项非常重要的技能。如果您可以构建模型,我建议您提高简单......
  • OpenCV的Windows程序图像处理,Win32 SDK,VS2022
    Windows程序调用OpenCV进行图像捕捉和处理显示1.OpenCV的视频接口VideoCapture很简洁,显示可以直接把图片帧数据转换成BMP,用StretchDIBits显示,方便又灵活。2.Windows用......
  • Python中OpenCV库(二)
    目录OpenCV库(二)五、图像直方图1、基本概念2、统计函数3、绘制直方图3.1matplotlib3.2OpenCV4、使用掩膜的直方图六、视频采集1、打开视频2、读取数据3、视频属性......