2019-7-12 opencv图像处理2-图像几何变换(缩放/平移/旋转/仿射变化/透视变换)

本文详细介绍了如何使用OpenCV进行图像的几何变换,包括缩放、平移、旋转、仿射变换和透视变换。通过具体的例子展示了如何使用cv.resize()、cv.warpAffine()和cv.warpPerspective()函数,以及不同的插值方法。同时,还提供了每种变换的示例代码和变换结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网参见
https://docs.opencv.org/3.4.1/da/d6e/tutorial_py_geometric_transformations.html

关于变换
opencv提供2个变换函数 cv.warpAffine和cv.warpPerspective,这个2个函数可以实现所有变换。cv.warpAffine的输入是2x3变换矩阵,cv.warpPerspective的输入是3x3变换矩阵。

1.缩放

缩放就是改变图像尺寸。opencv中用cv.resize()实现缩放功能。你可以手工设定图像尺寸,也可以设定缩放比例。有几种不同插值方式(interpolation)可以使用,缩小可以使用 cv.INTER_AREA,放大可以使用cv.INTER_CUBIC(慢)和cv.INTER_LINEAR 。默认插值方式(interpolation)是cv.INTER_LINEAR,它适合所有改变尺寸目的。

resize函数定义如下

dst	=	cv.resize(	src, dsize[, dst[, fx[, fy[, interpolation]]]]	)
  • dsize:输出图像的size; 如果设为0,或(0, 0), 计算方式为:
    ????? = ????(?????(?????.????), ?????(?????.????))
    dsize和(fx, fy)必须有一组不为0. 如果都为0,无法确定被resize后的图像大小

  • fx 水平轴缩放因子; 等于0时,计算方式为:
    (??????)?????.?????/???.????

  • fy 竖直轴缩放因子; 等于0时,计算方式为:
    (??????)?????.??????/???.????

  • interpolation 差值方法, 方法见InterpolationFlags。例如:INTER_CUBIC

例1,缩放图像

import cv2 
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('test.jpg')
#第一种,设置了缩放比例fx和fy,输出图像的尺寸不需要(none)
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)

#第二种,直接设置输出图像的尺寸,所以不用设置缩放因子
#height, width = img.shape[:2]
#res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)

while(1):
    cv2.imshow('res',res)
    cv2.imshow('img',img)

    if cv2.waitKey(1) & 0xFF == 27:
        break

cv2.destroyAllWindows()

结果显示如下
在这里插入图片描述

这里有2种方法可以实现缩放,第一种是利用缩放比例,第二种是指定图像尺寸。

2.平移

平移是物体位置的移动。假设你要按(x,y)方向移动,移动距离为(tx,ty),那么创建变化矩阵如下:

M= [ 1 0 t   x   0 1 t   y   ] \begin{bmatrix} 1 & 0 &t~x~ \\ 0 &1&t~y~ \\ \end{bmatrix} [10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值