让我们学习如何使用OpenCV调整图像大小。要调整图像的大小,请根据指定的比例因素或设置所需的高度和宽度,沿着每个轴(高度和宽度)缩放图像。
当调整图像大小:

  • 如果你想在调整后的图像中保持相同的大小,重要的是要记住图像的原始宽高比(即宽度与高度的比率)。
  • 减小图像的大小需要对像素进行重新采样。
  • 增加图像的大小需要重建图像。这意味着你需要插入新的像素。

1.简单版本代码实现

为了完成这些操作,需要使用各种插值技术。在OpenCV中有几种方法可用,选择哪种插值方法通常取决于特定的应用程序。
让我们看看通过自定义高度和宽度来调整图像大小的代码示例。随着你继续,我们将讨论使用不同的比例因素和插值方法来调整图像大小。
(1)Python

# 导入相关库
import cv2
import numpy as np# 读取图片
image = cv2.imread('image.jpg')
cv2.imshow('Original Image', image)# 让我们使用新的宽度和高度缩小图像
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resized_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)# 让我们使用新的宽度和高度来增加图像尺寸
up_width = 600
up_height = 400
up_points = (up_width, up_height)
resized_up = cv2.resize(image, up_points, interpolation= cv2.INTER_LINEAR)# 显示图像
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()#按下任意键退出
cv2.destroyAllWindows()

(2)C++

// including库
#include<opencv2/opencv.hpp>
#include<iostream>// 命名空间
using namespace std;
using namespace cv;int main()
{// 读取图像Mat image = imread("image.jpg");imshow("Original Image", image);// 让我们使用新的宽度和高度缩小图像int down_width = 300;int down_height = 200;Mat resized_down;//resize downresize(image, resized_down, Size(down_width, down_height), INTER_LINEAR);// 让我们使用新的宽度和高度增加图像尺寸int up_width = 600;int up_height = 400;Mat resized_up;//调节图像尺寸resize(image, resized_up, Size(up_width, up_height), INTER_LINEAR);// 显示图像并按任意键继续imshow("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;
}

2.代码解析

注意,在c++代码片段中,您首先为图像创建了一个矩阵,然后使用imread()函数读取它。
在开始调整图像大小之前,要知道它的原始大小。获取图像的大小:

  • 使用Python中的shape方法
  • c++中的rows和cols

在Python中image.shape返回三个值:高度、宽度和通道数量。

  • 1)调整函数的语法
    我们将在下面的小节中讨论各种输入参数选项,resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

    • src:输入图像,它可以是带有输入图像路径的字符串(例如:’ test_image.png ')。
    • dsize:调整大小后的图像的大小
    • fx:沿水平轴的比例因子。
    • fy:垂直轴上的比例因子。
    • interpolation:它让我们可以选择不同的方法来调整图像的大小。
  • 2)通过指定宽度和高度来调整大小
    在第一个例子中,让我们通过指定一个新的宽度和高度来调整图像的大小。在下面的代码中:

    • 我们将所需的宽度设置为300,所需的高度设置为200。
    • 这两个值组合在一个2D向量中,这是resize()函数所要求的。
    • 我们还指定了插值方法,它恰好是默认值。

(1)Python

# 设置行和列数
# 让我们缩小图像使用新的宽度和高度
down_width = 300
down_height = 200
down_points = (down_width, down_height)
resize_down = cv2.resize(image, down_points, interpolation= cv2.INTER_LINEAR)

(2)C++

// 设置行和列数
// 让我们缩小图像使用新的宽度和高度
int down_width = 300;
int down_height = 200;
Mat resize_down;// 降采样
resize(image, resize_down, Size(down_width, down_height), INTER_LINEAR);

根据我们定义的新的高度和宽度参数,图像要么变大,要么变小。但需要注意的是,这种通过定义一个显式的宽度和高度值来调整大小的做法会使结果图像失真。也就是说,图像的宽高比不会保持不变。

  • 3)使用缩放因子调整大小
    现在我们用缩放因子来调整图像的大小。但在进一步讨论之前,您需要了解什么是比例因子。
    缩放因子通常是乘以某个数字,在我们的例子中是图像的宽度和高度。它有助于保持长宽比完好无损,并保持显示质量。所以当你放大或缩小图像时,图像不会显得扭曲。
    (1)Python
# 通过指定两个缩放因子,将图像放大1.2倍
scale_up_x = 1.2
scale_up_y = 1.2
# 将图像缩小0.6倍,指定单个比例因子。
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)

(2)C++

// 通过指定两个缩放因子,将图像放大1.2倍
double scale_up_x = 1.2;
double scale_up_y = 1.2;
// 将图像缩小0.6倍,指定单个比例因子。
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代码片段中:
a. 我们沿着水平和垂直轴定义新的比例因子。
b. 定义缩放因子可以消除对缩放后图像的宽度和高度的需求。因此,我们保持dsize为None。
在上面的c++代码片段中:
a. 我们为新图像定义了新的比例因子。
b. 定义缩放因子可以消除对缩放后图像的宽度和高度的需求,所以我们将Size()保持为空。

  • 4)用不同的插值方法调整大小
    不同的插值方法用于不同的尺寸调整目的。

    • INTER_AREA:INTER_AREA使用像素面积关系进行重采样。这最适合于缩小图像的大小。当用于放大图像时,它使用INTER_NEAREST方法。
    • INTER_CUBIC:使用双三次插值来调整图像的大小。在调整大小和插值新像素时,该方法对图像的4×4邻近像素起作用。然后取16个像素的加权平均值来创建新的插值像素。
    • INTER_LINEAR:这种方法有点类似于INTER_CUBIC插值。但与INTER_CUBIC不同的是,它使用2×2相邻像素来获得插值像素的加权平均值。
    • INTER_NEAREST:INTER_NEAREST方法使用最近邻概念进行插值。这是最简单的方法之一,只使用图像的一个相邻像素进行插值。

(1)Python

# 使用不同的插值方法缩小图像0.6倍
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)# 在水平轴连接图像以进行比较
vertical= np.concatenate((res_inter_nearest, res_inter_linear, res_inter_area), axis = 0)
# 显示图像按任意键继续
cv2.imshow('Inter Nearest :: Inter Linear :: Inter Area', vertical)

(2)C++

// 使用不同的插值方法缩小图像0.6倍
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);Mat a,b,c;
vconcat(res_inter_linear, res_inter_nearest, a);
vconcat(res_inter_area, res_inter_area, b);
vconcat(a, b, c);
// 显示图像按任意键继续
imshow("Inter Linear :: Inter Nearest :: Inter Area :: Inter Area", c);

在上面的Python代码片段中,我们使用不同的插值方法来调整图像的大小。类似地,在c++代码片段中,我们首先为输出图像定义新的矩阵,然后使用不同的插值方法调整它们的大小。

总结

您学习了如何使用自定义的高度和宽度来调整图像的大小。您还看到了如何使用缩放因子保持长宽比不变,确保调整大小的图像看起来不失真。我们还讨论了不同类型的插值方法。

参考目录

https://learnopencv.com/image-resizing-with-opencv/

OpenCV基础(3)使用OpenCV调整图像大小相关推荐

  1. 6.openCV调整图像大小新思路(cv2.resize和imutils.resize)

    6.opencv调整图像大小的新方法imutils.resize 一.openCV 调整图像大小 ( cv2.resize ) 二.项目结构和代码讲解 1.项目结构 2.代码讲解 3.比较 OpenC ...

  2. 【OpenCV入门】调整图像大小/裁剪图像

    调整图像大小-resize 函数resize 函数的定义 void resize( InputArray src, //输入图像OutputArray dst,//输出图像Size dsize, // ...

  3. C++ OpenCV 使用 resize() 调整图像大小

    调整图像大小意味着改变它的尺寸,无论是宽度.高度还是两者都改变​​.此外,原始图像的纵横比可以保留在调整大小的图像中.为了调整图像大小,OpenCV 提供了 resize() 函数. resize() ...

  4. opencv resize 调整图像大小

    函数原型 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpol ...

  5. plt.scatter设置点大小_23、OpenCV调整图像大小

    1.resize()函数 最简单的图像变换就是调整图像大小.resize()函数用于调整图像的大小. 根据输入的图像和尺寸,生成所需尺寸的新图像. void cv::resize( cv::Input ...

  6. Android OpenCV之算数操作与调整图像的亮度和对比度

    Android OpenCV之算数操作与调整图像的亮度和对比度 OpenCV算数API介绍 Mat 对象之间的加.减.乘.除最常用的方法如下: add(Mat src1, Mat src2, Mat ...

  7. MATLAB基础编程(005-01)之Resize an Image with imresize Function 使用imresize函数 调整图像大小

    This example shows how to resize an image using the imresize function. 此示例显示如何使用imresize函数调整图像大小. Sp ...

  8. python如何调整图片大小_Python基础进阶 - 如何使用Python调整图像大小

    Python已成为编程语言的首选.不仅适用于一般的面向对象的编程,还适用于各种科学,数学,统计等应用. 由于强大的开发人员社区已经使用Python开发了用于各种目的的库和API,因此所有这些都是可能的 ...

  9. python调整图像大小_使用Python调整图像大小

    作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...

最新文章

  1. JAVA的instanceOf什么时候用
  2. 在线作图|2分钟在线绘制三维CCA图
  3. 基于深度学习的OCR-from 美團技術團隊
  4. ESP32开发板 V1.0.0 Rev1 wifi 蓝牙4MB FLASH MicroPython
  5. 64位CentOs7源码安装mysql-5.6.35过程分享
  6. boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密
  7. 在JAVA 中将堆与栈分开的原因
  8. Scala 入门2(数组、List、Set、Map、元组、Option、Iterator)
  9. php 清除内容中的bom,检查并清除php文件中bom的函数
  10. EXCEL 制作万年历
  11. HTTPConnectionPool(host:XX)Max retries exceeded with url 解决方法
  12. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建
  13. 物联卡可以持续使用的时间有多久?
  14. 【狂神说Redis】2Redis入门 2-1概述
  15. 如何快速8小时写一篇毕业论文
  16. 推荐几款不错的企业网站,前端设计师寻求设计灵感!
  17. 高中数学排列组合公式/排列组合计算公式
  18. 条件格式实现ABC分析
  19. 外贸电商:除了paypal,这些支付方式也能帮到你!
  20. 弦理论能成为新的万物理论吗?

热门文章

  1. linux-rm -f如何恢复
  2. 【面试】大佬是如何面试别人List相关知识的
  3. symfony框架Twig模板语言的使用
  4. Mac-如何在任意文件夹下打开终端
  5. CentOS支持中文
  6. 2008年上半年系统分析师上午英语试题分析与参考答案
  7. js鼠标放上去和移出事件
  8. vi 查看最顶部_最详细的 Vi 编辑器使用指南(翻译)
  9. 什么是Nginx服务器
  10. 弧度和度 180/PI PI/180换算关系