📅  最后修改于: 2020-08-28 00:57:45             🧑  作者: Mango
在上几章节中,我们学习了opencv的一些读取、保存等操作。
从此章节开始,我们将学习利用openc进行一些简单的图像操作。
要在Python中调整图片大小,可以使用OpenCV库cv2的cv2.resize()函数。
默认情况下,调整大小仅会更改图像的宽度和高度。根据需要可以保留或不保留长宽比。可以通过分别为给定目标高度或宽度计算宽度或高度来保留纵横比。
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
src
是numpy数组形式的源图像,原始图像或输入图像dsize
是输出图像的所需大小,以元组形式给出fx
是沿X轴或水平轴的缩放比例fy
是沿Y轴或垂直轴的比例因子interpolation
可以是以下值之一。
基于选择的插值技术,使用相应的算法。您可以将插值视为一种方法,该方法根据相邻像素和调整图像大小的比例来确定哪个像素获得哪个值。
您可以通过三种方式调整图像的大小。
在下面的示例中,我们将看到如何在保留宽高比的同时使用来调整上述图像的大小。我们将图像的大小调整为其实际形状的50%,即将其高度减小为其原始形状的50%,将宽度减小为其原始形状的50%。
import cv2
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
#percent by which the image is resized
scale_percent = 50
#calculate the 50 percent of original dimensions
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)
# dsize
dsize = (width, height)
# resize image
output = cv2.resize(src, dsize)
cv2.imwrite('D:/cv2-resize-image-50.png',output)
在上面的Python程序中我们做了什么?
cv2.imread()
使用透明通道(如果有)读取给定文件,并返回一个具有像素值的numpy数组。cv2.IMREAD_UNCHANGED
scale_percent
设置为50。我们将图像缩放到其原始尺寸(宽度和高度)的50%。int(src.shape[1] * scale_percent / 100)
dsize
使用新计算的width
和设置所需的大小height
。cv2.resize
将图像调整为该src
大小dsize
并返回numpy数组。cv2.imwrite
cv2.resize
我们将仅沿x轴或水平轴缩放图像。并且我们保持图像的高度不变。
在dsize中,我们将保持与原始图像相同的高度,但会更改宽度。
import cv2
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
# set a new width in pixels
new_width = 300
# dsize
dsize = (new_width, src.shape[0])
# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)
cv2.imwrite('D:/cv2-resize-image-width.png',output)
我们将仅沿y轴或“垂直”轴缩放图像。输出图像的宽度与源图像的宽度保持不变。
在dsize中,我们将保持与原始图像相同的宽度,但会更改高度。
import cv2
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)
# set a new height in pixels
new_height = 200
# dsize
dsize = (src.shape[1], new_height)
# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)
cv2.imwrite('D:/cv2-resize-image-height.png',output)
——->>>>>本章节结束