【OpenCV】图像变换(缩放、平移、旋转、仿射)

这篇具有很好参考价值的文章主要介绍了【OpenCV】图像变换(缩放、平移、旋转、仿射)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

图像变换是指通过对图像进行缩放、平移、旋转、仿射、透视等变换来改变图像的形状和大小。在本篇博客中,我们将详细介绍OpenCV中的图像变换函数,并提供示例代码以帮助读者更好地理解这些函数的使用方法。


1. 缩放变换

缩放变换是指通过改变图像的大小来改变图像的形状。在OpenCV中,可以使用resize函数实现缩放变换。该函数的原型如下:

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

其中,src表示原图像,dst表示输出图像,dsize表示输出图像的大小,fx和fy表示在x和y方向上的缩放因子,interpolation表示缩放方法,常见的有以下5种:

  1. cv2.INTER_NEAREST 最近邻插值法;
  2. cv2.INTER_LINEAR 双线性插值法(默认)(推荐放大处理);
  3. cv2.INTER_AREA 基于局部像素点的重采样(推荐缩小处理);
  4. cv2.INTER_CUBIC 基于4x4像素邻域的3次插值法(推荐放大处理);
  5. cv2.INTER_LANCZOS4 基于8x8像素邻域的lanczos插值;

下面是一个简单的示例代码,展示如何使用resize函数进行图像缩放:

import cv2

# 加载图像
img = cv2.imread('input.jpg')

# 缩放图像
resized_img = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

# 显示缩放后的图像
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先使用cv2.imread函数加载输入图像,然后使用cv2.resize函数将图像缩小一半,最后使用cv2.imshow函数显示缩放后的图像。

2. 平移变换

**平移变换是指通过改变图像的位置来改变图像的形状。**在OpenCV中,可以使用warpAffine函数实现平移变换。该函数的原型如下:

void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

其中,src表示原图像,dst表示输出图像,M表示变换矩阵,dsize表示输出图像的大小,flags表示插值方法,borderMode表示边界填充模式,borderValue表示填充颜色。

下面是一个简单的示例代码,展示如何使用warpAffine函数进行图像平移:

import cv2
import numpy as np

# 加载图像
img = cv2.imread('input.jpg')

# 定义平移矩阵
M = np.float32([[1, 0, 100], [0, 1, 50]])

# 平移图像
translated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 显示平移后的图像
cv2.imshow('Translated Image', translated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先使用cv2.imread函数加载输入图像,然后定义一个平移矩阵M,其中第一行表示在x方向上平移100个像素,第二行表示在y方向上平移50个像素。最后,我们使用cv2.warpAffine函数对图像进行平移,并使用cv2.imshow函数显示平移后的图像。

3. 旋转变换

**旋转变换是指通过改变图像的方向来改变图像的形状。**在OpenCV中,可以使用getRotationMatrix2D和warpAffine函数实现旋转变换。getRotationMatrix2D函数用于计算旋转矩阵,warpAffine函数用于对图像进行旋转变换。这两个函数的原型如下:

Mat getRotationMatrix2D(Point2f center, double angle, double scale);
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

其中,center表示旋转中心,angle表示旋转角度,scale表示缩放因子,src表示原图像,dst表示输出图像,M表示变换矩阵,dsize表示输出图像的大小,flags表示插值方法,borderMode表示边界填充模式,borderValue表示填充颜色。

下面是一个简单的示例代码,展示如何使用getRotationMatrix2D和warpAffine函数进行图像旋转:

import cv2
import numpy as np

# 加载图像
img = cv2.imread('input.jpg')

# 计算旋转矩阵
center = (img.shape[1] / 2, img.shape[0] / 2)
angle = 45
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)

# 旋转图像
rotated_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 显示旋转后的图像
cv2.imshow('Rotated Image', rotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先使用cv2.imread函数加载输入图像,然后使用cv2.getRotationMatrix2D函数计算旋转矩阵M,其中center表示旋转中心,angle表示旋转角度,scale表示缩放因子。最后,我们使用cv2.warpAffine函数对图像进行旋转,并使用cv2.imshow函数显示旋转后的图像。

4. 仿射变换

**仿射变换是指通过线性变换来改变图像的形状。**在OpenCV中,可以使用getAffineTransform和warpAffine函数实现仿射变换。getAffineTransform函数用于计算仿射变换矩阵,warpAffine函数用于对图像进行仿射变换。这两个函数的原型如下:

Mat getAffineTransform(const Point2f src[], const Point2f dst[]);
void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar() )

其中,src表示原图像中的三个点,dst表示变换后的三个点,M表示变换矩阵,dsize表示输出图像的大小,flags表示插值方法,borderMode表示边界填充模式,borderValue表示填充颜色。

下面是一个简单的示例代码,展示如何使用getAffineTransform和warpAffine函数进行仿射变换:

import cv2
import numpy as np

# 加载图像
img = cv2.imread('input.jpg')

# 定义原图像中的三个点和变换后的三个点
src_points = np.float32([[50, 50], [200, 50], [50, 200]])
dst_points = np.float32([[10, 100], [200, 50], [100, 250]])

# 计算仿射变换矩阵
M = cv2.getAffineTransform(src_points, dst_points)

# 仿射变换图像
affine_img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))

# 显示变换后的图像
cv2.imshow('Affine Image', affine_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例代码中,我们首先使用cv2.imread函数加载输入图像,然后定义原图像中的三个点和变换后的三个点,其中src_points表示原图像中的三个点的坐标,dst_points表示变换后的三个点的坐标。最后,我们使用cv2.getAffineTransform函数计算仿射变换矩阵M,并使用cv2.warpAffine函数对图像进行仿射变换,并使用cv2.imshow函数显示变换后的图像。

除了以上介绍的几种变换,OpenCV中还提供了许多其他的图像变换函数,例如透视变换、极坐标变换等等,后续给大家分享。文章来源地址https://www.toymoban.com/news/detail-731348.html

到了这里,关于【OpenCV】图像变换(缩放、平移、旋转、仿射)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

    为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。 图像缩放函数,用于把图像按指定的尺寸放大或缩小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的图像 src:需要变换的原图像 disize:(x, y)需要

    2024年02月08日
    浏览(37)
  • 【C++ OpenCV】图像变换:连接、尺寸、翻转、旋转、仿射变换

    目录 图像缩放变换 图像翻转 图像拼接 纵向拼接 横向拼接 图像插值原理 作用 单线性插值 双线性插值的公式 双线性插值的例子 双线性插值的直观展示 意义 仿射变换 图像旋转 实操 一、实现图像旋转 二、根据定义的三个点实现仿射变换,并且求取仿射变换矩阵 源码 src -

    2024年01月18日
    浏览(31)
  • Halcon用矩阵实现图像变换(平移,旋转,缩放,镜像等)

    目录 图像变换介绍  用Halcon自带的算子实现图像变换 使用矩阵来实现相关算子的功能 一、平移 二、旋转 三、缩放 四、镜像 完整代码         在halcon中经常会用到图像变换的操作,然后这次作业是用矩阵来实现相关算子的功能,学到了挺多的所以就记录下来方便复习。

    2024年04月17日
    浏览(27)
  • 数字图像处理 matlab图像的几何运算 实验三 旋转 缩放 裁剪 镜像变换 平移

    原图: 读取原图(这里我的图片名字是atm.png): 我们先说原理,图像旋转的本质是向量的旋转。 矩阵乘法的实质是进行线性变换,因此对一个向量进行旋转操作也可以通过矩阵和向量相乘的方式进行。 因为图像都是通过二维矩阵存放的(单通道),所以对图像进行旋转时

    2024年02月07日
    浏览(35)
  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

    几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine :使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。 cv2.warpPerspective :使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等操作。 cv2.getAffineTransform :计算仿射变换

    2024年02月05日
    浏览(34)
  • 【OpenCV • c++】图像几何变换 | 图像仿射变换

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月16日
    浏览(25)
  • OpenCV(十一):图像仿射变换

    目录 1.图像仿射变换介绍  仿射变换: 仿射变换矩阵: 仿射变换公式: 2.仿射变换函数 仿射变换函数:warpAffine() 图像旋转:getRotationMatrix2D() 计算仿射变换矩阵:getAffineTransform()  3.demo 1.图像仿射变换介绍  仿射变换:        仿射变换是由平移、缩放、旋转、翻转和错切组

    2024年02月10日
    浏览(30)
  • 仿射变换中的旋转缩放变换矩阵推导

    仿射变换可以将矩阵形状转换为平行四边形。可以挤压形状,但是必须保持两边平行。常见的是旋转、缩放、平移变换。缩放和平移比较简单,本文重点推导旋转缩放变换矩阵。 任意一点 ( x 0 , y 0 ) (x_0,y_0) ( x 0 ​ , y 0 ​ ) 可以看成 ( x 0 , 0 ) (x_0, 0) ( x 0 ​ , 0 ) 向量和 ( 0 ,

    2024年04月24日
    浏览(30)
  • (opencv)图像几何变换——平移

    图像的平移操作是将图像的所有像素坐标进行水平或垂直方向移动,也就是将所有像素点按照给定的偏移量在水平方向沿x轴、垂直方向上沿y轴移动。平移变换分为两种类型:图像大小变化与图像大小不变。第一种类型保证图像平移的完整信息,第二种图像导致原始图像的部

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包