使用OpenCV调整图像大小
要调整图像的大小,可以沿着每个轴(高度和宽度)
缩放它,考虑指定的比例系数,或者设置所需的高度和宽度。
当调整图片大小时:
- 重要的是要记住图像的原始长宽比(即宽高比),如果你想在调整大小的图像中保持相同的比例。
- 减小图像的大小将需要对像素进行重新采样。
- 增加图像的大小需要重建图像。这意味着您需要插值新的像素。
各种插值技术来完成这些操作。OpenCV中有几种可用的方法,具体的选择通常取决于特定的应用程序
让我们来看看通过自定义高度和宽度的大小来使图像变大或变小的代码示例。随着您的深入,我们将讨论使用不同的尺度因子和插值方法调整大小。
Python
# let's start with the Imports
import cv2
import numpy as np# Read the image using imread function
image = cv2.imread('image.jpg')
cv2.imshow('Original Image', image)# let's downscale the image using new width and height
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resized_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)# let's upscale the image using new width and height
up_width = 600
up_height = 400
up_points = (up_width, up_height)
resized_up = cv2.resize(image, up_points, interpolation= cv2.INTER_LINEAR)# Display images
cv2.imshow('Resized Down by defining height and width', resized_down)
cv2.waitKey()
cv2.imshow('Resized Up image by defining height and width', resized_up)
cv2.waitKey()#press any key to close the windows
cv2.destroyAllWindows()
C++
// let's start with including libraries
#include<opencv2/opencv.hpp>
#include<iostream>// Namespace to nullify use of cv::function(); syntax
using namespace std;
using namespace cv;int main()
{// Read the image using imread functionMat image = imread("image.jpg");imshow("Original Image", image);// let's downscale the image using new width and heightint down_width = 300;int down_height = 200;Mat resized_down;//resize downresize(image, resized_down, Size(down_width, down_height), INTER_LINEAR);// let's upscale the image using new width and heightint up_width = 600;int up_height = 400;Mat resized_up;//resize upresize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);// Display Images and press any key to continueimshow("Resized Down by defining height and width", resized_down);waitKey();imshow("Resized Up image by defining height and width", resized_up);waitKey();destroyAllWindows();return 0;
}
Resize 函数语法
让我们从OpenCV resize()函数语法开始。注意,只需要两个输入参数:
- 源图像。
- 调整后的图像所需的大小,dsize。
我们将在下面的小节中讨论各种输入参数选项。
resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
- src:它是必需的输入图像,它可以是包含输入图像路径的字符串(例如:’ test_image.png ')。
- dsize:这是输出图像的期望大小,它可以是一个新的高度和宽度。
- fx:水平轴上的比例因子。
- fy:垂直轴上的比例因子。
- 插值:它提供给我们不同的方法来调整图像的大小。
通过指定宽度和高度调整大小
在第一个例子中,让我们通过指定一个新的宽度和高度来调整图像的大小。在下面的代码中
- 我们将所需的宽度设置为300,所需的高度设置为200。
- 这两个值组合在一个2D向量中,这是resize()函数所需要的。
- 我们还指定了插值方法,这恰好是默认值。
Python
# Set rows and columns
# lets downsize the image using new width and height
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resize_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)
C++
// Set rows and columns
// lets downsize the image using new width and heightint down_width = 300;int down_height = 200;Mat resize_down;// resize downresize(image, resize_down, Size(down_width, down_height), INTER_LINEAR);
接下来,我们创建另一个变量来增加图像的大小。
Python
# Set rows and columns
up_width = 600
up_height = 400
up_points = (up_width, up_height)
# resize the image
resized_up = cv2.resize(image, up_points, interpolation = cv2.INTER_LINEAR)
C++
// Set rows and columns
int up_width = 600;
int up_height = 400;
Mat resized_up;
//resize up
resize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);
在上面的Python代码片段中,我们使用resize()函数定义了新的宽度和高度来优化图像。流程和步骤与前面的代码片段类似。
使用缩放因子调整大小
缩放因子(Scale Factor)
通常是一个数字,它缩放或乘以某个数量,在我们的例子中是图像的宽度和高度。它有助于保持高宽比完好无损,并保持显示质量。因此,当你放大
或缩小
它时,图像不会出现扭曲。
Python
# Scaling Up the image 1.2 times by specifying both scaling factors
scale_up_x = 1.2
scale_up_y = 1.2
# Scaling Down the image 0.6 times specifying a single scale factor.
scale_down = 0.6scaled_f_down = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
scaled_f_up = cv2.resize(image, None, fx= scale_up_x, fy= scale_up_y, interpolation= cv2.INTER_LINEAR)
C++
// Scaling Up the image 1.2 times by specifying both scaling factors
double scale_up_x = 1.2;
double scale_up_y = 1.2;
// Scaling Down the image 0.6 times specifying a single scale factor.
double scale_down = 0.6;
Mat scaled_f_up, scaled_f_down;
//resize
resize(image,scaled_f_down, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
在上面的Python代码片段中:
- 我们在水平轴和垂直轴上定义了新的缩放因子。
- 定义缩放因子就不需要为宽度和高度添加新的点。因此,我们保持
dsize
为None
。
在上面的c++代码片段中
- 我们定义了新的比例因子以及新图像的矩阵。
- 因为我们不需要新的宽度和高度点,所以我们保持Size()为空并使用resize()函数。
使用不同的插值方法调整大小
INTER_AREA
: INTER_AREA使用像素面积关系进行重采样。这最适合于缩小图像的大小(缩小)。当用于放大图像时,它使用INTER_NEAREST方法。INTER_CUBIC:
使用双三次插值来调整图像的大小。在调整大小和插值新像素时,该方法作用于图像的4×4邻近像素。然后取16个像素的加权平均值来创建新的插值像素。
INTER_LINEAR
:这种方法有点类似于INTER_CUBIC插值。但与INTER_CUBIC不同的是,它使用2×2邻近像素来获得插值像素的加权平均。INTER_NEAREST
: INTER_NEAREST方法使用最近邻概念进行插值。这是最简单的方法之一,只使用图像中的一个相邻像素进行插值。
Python
# Scaling Down the image 0.6 times using different Interpolation Method
res_inter_nearest = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_NEAREST)
res_inter_linear = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_LINEAR)
res_inter_area = cv2.resize(image, None, fx= scale_down, fy= scale_down, interpolation= cv2.INTER_AREA)
C++
# Scaling Down the image 0.6 using different Interpolation Method
Mat res_inter_linear, res_inter_nearest, res_inter_area;
resize(image, res_inter_linear, Size(), scale_down, scale_down, INTER_LINEAR);
resize(image, res_inter_nearest, Size(), scale_down, scale_down, INTER_NEAREST);
resize(image, res_inter_area, Size(), scale_down, scale_down, INTER_AREA);
在上面的Python代码片段中,我们使用不同的插值方法来调整图像的大小。类似地,在c++代码片段中,我们首先为输出图像定义新的矩阵,然后用不同的插值方法调整它们的大小。现在让我们显示图像。
Python
# Concatenate images in horizontal axis for comparison
vertical= np.concatenate((res_inter_nearest, res_inter_linear, res_inter_area), axis = 0)
# Display the image Press any key to continue
cv2.imshow('Inter Nearest :: Inter Linear :: Inter Area', vertical)
C++
Mat a,b,c;
vconcat(res_inter_linear, res_inter_nearest, a);
vconcat(res_inter_area, res_inter_area, b);
vconcat(a, b, c);
// Display the image Press any key to continue
imshow("Inter Linear :: Inter Nearest :: Inter Area :: Inter Area", c);
使用OpenCV调整图像大小相关推荐
- OpenCV基础(3)使用OpenCV调整图像大小
让我们学习如何使用OpenCV调整图像大小.要调整图像的大小,请根据指定的比例因素或设置所需的高度和宽度,沿着每个轴(高度和宽度)缩放图像. 当调整图像大小: 如果你想在调整后的图像中保持相同的大小, ...
- 6.openCV调整图像大小新思路(cv2.resize和imutils.resize)
6.opencv调整图像大小的新方法imutils.resize 一.openCV 调整图像大小 ( cv2.resize ) 二.项目结构和代码讲解 1.项目结构 2.代码讲解 3.比较 OpenC ...
- plt.scatter设置点大小_23、OpenCV调整图像大小
1.resize()函数 最简单的图像变换就是调整图像大小.resize()函数用于调整图像的大小. 根据输入的图像和尺寸,生成所需尺寸的新图像. void cv::resize( cv::Input ...
- 【OpenCV入门】调整图像大小/裁剪图像
调整图像大小-resize 函数resize 函数的定义 void resize( InputArray src, //输入图像OutputArray dst,//输出图像Size dsize, // ...
- C++ OpenCV 使用 resize() 调整图像大小
调整图像大小意味着改变它的尺寸,无论是宽度.高度还是两者都改变.此外,原始图像的纵横比可以保留在调整大小的图像中.为了调整图像大小,OpenCV 提供了 resize() 函数. resize() ...
- opencv resize 调整图像大小
函数原型 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpol ...
- python调整图像大小_使用Python调整图像大小
作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...
- OpenCV调整图像的亮度
OpenCV调整图像的亮度 像素越靠近0图像越按,越靠近255,图像越亮,所以调整图片的亮度也就是调整每个像素点数值的大小. 原图 代码 public class DemoMat {static{Sy ...
- python运行界面如何缩小_如何使用Python调整图像大小
作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...
最新文章
- Linux查看文件夹大小du
- 面试:Java 泛型背后的原理是什么?
- Windows Server 笔记之活动目录,域的联系和区别
- 文献记录(part#)--Automatic diagnosis of ECG disease based on intelligent simulation modeling
- ASP.NET Core 中间件Diagnostics使用
- qt绘制一圈圆_Qt绘制圆形,矩形等图形 绘制同心圆
- GO 语言编程 windows 环境搭建
- js - 让 git 上 Mint-UI 的例子跑起来 - 方法大全
- 如何给Xcode添加我们常用的插件呢?
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(二)
- 新增对象Products 的流程说明
- mysql数据库原理与应用武洪萍第三张答案_MySQL数据库原理及应用(第2版)(微课版)...
- 单片机音频谱曲软件_单片机谱曲软件怎么弄 51单片机蜂鸣器电子琴程序
- 曲线拟合——最小二乘法( Ordinary Least Square,OLS)
- 利用计算机进行导弹轨道计算,超级计算机为何被称为大国重器?可模拟核试验或测算弹道导弹轨迹!...
- 文件截取\裁剪工具软件
- 【Redshift渲染器渲染出图片有色差(红移渲染器)】
- Spline样条曲线
- 设计一个互联网交换设备的SNMP MIB库“X-MIB”
- 软件开发搞定计算机组成原理:计算篇
热门文章
- 社区APP “钱途”漫漫
- Linux驱动|rtc-hym8563移植笔记
- flutter开发插件和包
- 企业智能通信办公系统UCM6510领跑企业办公通信
- Towards Multi-Modal Intention Interfaces for Human-Robot Co-Manipulation
- text函数提取年月
- 转载:PhotoRobot之Sohu相册
- 在对象内部尽量直接訪问实例变量 --Effictive Objective-C 抄书
- Scipy.integrate(scipy积分部分中文文档翻译,进度70%)
- soc均衡,soc均衡控制,储能,蓄电池充放电控制,蓄电池储 能