OpenCV-Python学习19—— OpenCV 图像几何变换:图像缩放cv.warpAffine、cv.resize
1. 学习目标
- 学习图像的缩放矩阵;
- 学习 OpenCV 图像缩放函数 cv.resize 和 cv.warpAffine。
2. 图像的缩放矩阵
缩放是物体在 x 轴和 y 轴的缩放比例。
- fx 是图像在 x 轴的缩放比例,fy 是图像在 y 轴的缩放比例,公式:
3. 图像缩放函数
3.1 cv.warpAffine() 函数使用
cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
3.2 参数说明
参数 | 说明 |
---|---|
src | 表示输入图像。 |
M | 表示变换矩阵,2行3列。 |
dsize | 表示输出图像的大小,二元元组 (width, height)。 |
dst | 表示变换操作的输出图像,可选项。 |
flags | 表示插值方法,整型(int),可选项。 |
borderMode | 表示边界像素方法,整型(int),可选项,默认值为 cv.BORDER_REFLECT。 |
borderValue | 表示边界填充值,可选项,默认值为 0(黑色填充)。 |
3.3 flags 值说明
值 | 说明 |
---|---|
cv.INTER_LINEAR | 表示线性插值,默认选项。 |
cv.INTER_NEAREST | 表示最近邻插值。 |
cv.INTER_AREA | 表示区域插值。 |
cv.INTER_CUBIC | 表示三次插值。 |
cv.INTER_LANCZOS4 | 表示 Lanczos 插值。 |
4. cv.resize() 实现图像的缩放和大小变化
4.1 cv.resize() 函数使用
cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) → dst
4.2 参数说明
参数 | 说明 |
---|---|
src | 表示输入图像。 |
dsize | 表示输出图像的大小,二元元组 (width, height)。 |
dst | 表示变换操作的输出图像,可选项。 |
fx | 表示 x 轴上的缩放比例,实型,可选项。 |
fy | 表示 y 轴上的缩放比例,实型,可选项。 |
interpolation | 表示插值方法,整型,可选项。 |
4.3 interpolation 值说明
值 | 说明 |
---|---|
cv.INTER_LINEAR | 表示双线性插值(默认方法)。 |
cv.INTER_AREA | 表示使用像素区域关系重采样,缩小图像时可以避免波纹出现。 |
cv.INTER_NEAREST | 表示最近邻插值。 |
cv.INTER_CUBIC | 表示 4x4 像素邻域的双三次插值。 |
cv.INTER_LANCZOS4 | 表示 8x8 像素邻域的Lanczos插值。 |
5. cv.warpAffine 图像缩放实例
5.1 实例代码
import cv2 as cv
import numpy as np
# 图像缩放
def image_zoom(src, zx=1, zy=1):
h,w,c = src.shape
M = np.float32([[1*zx,0,0],[0,1*zy,0]])
img = cv.warpAffine(src,M,(int(w*zx),int(h*zy)))
return img
if __name__ == "__main__":
img = cv.imread("./images/lena.jpg")
cv.imshow("origin", img)
img_zoom_half = image_zoom(img, 0.5,0.5)
cv.imshow("zoom0.5", img_zoom_half)
img_zoom_10 = image_zoom(img, 1.1,1.1)
cv.imshow("zoom1.1", img_zoom_10)
cv.waitKey(0)
cv.destroyAllWindows()
5.2 效果
6. cv.resize 图像缩放实例
6.1 实例代码
import cv2 as cv
import numpy as np
# 图像缩放
def image_resize(src):
h,w,c = src.shape
zoom_size = cv.resize(src,(int(w*0.5),int(h*0.5)))
cv.imshow("zoom_size", zoom_size)
zoom_scale = cv.resize(src,None,fx=0.5,fy=0.5)
cv.imshow("zoom_scale", zoom_scale)
if __name__ == "__main__":
img = cv.imread("./images/lena.jpg")
cv.imshow("origin", img)
image_resize(img)
cv.waitKey(0)
cv.destroyAllWindows()
6.2 效果
7. 总结
- 变换缩放矩阵 M 是 np.float32 类型 ndarray 二维数组(2行*3列)。
- 变换矩阵 M = np.float32([[1 * zx,0,0],[0,1 * zy,0]]),zx 表示 x 轴的缩放比例,zy 表示 y 轴的缩放比例。
- dsize 输出图像的大小格式为元组 (width, height)。
- 图像缩放可以通过 dsize 直接设定输出图像的大小,也可以通过 dx, dy 设置图像缩放的比例(dsize 设为 None)。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkife
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01