计算机视觉中的2D变换:用Python让图像‘动’起来

news/2024/9/28 21:50:09/

嘿,小伙伴们!今天我们要聊的是计算机视觉中的2D变换——那些能让图像‘动’起来的技术。无论你是初学者还是资深开发者,这篇文章都将带你深入了解2D变换,并通过Python代码实战演示。准备好了吗?让我们开始吧!🌟


📊 什么是2D变换?

计算机视觉中,2D变换是指对图像进行平移、旋转、缩放、剪切等操作的过程。通过这些变换,我们可以改变图像的位置、大小和方向,以达到不同的视觉效果或处理需求。

🧪 实战案例:用Python进行2D变换

假设我们有一张图片,我们想要在这张图片上应用几种常见的2D变换,比如旋转和平移,来看看Python是如何做到这一点的。我们将使用OpenCV库来完成这项任务。

🛠️ 准备工作

首先,确保你已经安装了OpenCV库。如果没有安装,可以通过pip安装:

pip install opencv-python
📖 代码实战
  1. 加载图片

    我们先加载一张图片,并创建一个副本以便进行变换。

    python">import cv2
    import numpy as np# 加载图片
    img = cv2.imread('example.jpg')
    img_copy = img.copy()
    
  2. 旋转图片

    • 定义旋转角度:我们将图片逆时针旋转45度。
    python">angle = 45 * np.pi / 180  # 将角度转换为弧度
    height, width = img.shape[:2]
    rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), angle * 180 / np.pi, 1)# 应用旋转
    rotated_img = cv2.warpAffine(img_copy, rotation_matrix, (width, height))
    
  3. 平移图片

    • 定义平移距离:我们将图片向右平移100像素,向下平移50像素。
    python">translation_matrix = np.float32([[1, 0, 100], [0, 1, 50]])# 应用平移
    translated_img = cv2.warpAffine(img_copy, translation_matrix, (width, height))
    
  4. 缩放图片

    • 定义缩放因子:我们将图片放大两倍。
    python">scale_factor = 2.0
    scaled_img = cv2.resize(img_copy, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_LINEAR)
    
  5. 剪切图片

    • 定义剪切矩阵:我们将图片沿水平方向剪切10%。
    python">shear_matrix = np.float32([[1, 0.1, 0], [0, 1, 0]])# 应用剪切
    sheared_img = cv2.warpAffine(img_copy, shear_matrix, (width, height))
    
  6. 显示结果

    显示我们变换后的结果,并保存图片。

    python"># 显示图像
    cv2.imshow('Original Image', img)
    cv2.imshow('Rotated Image', rotated_img)
    cv2.imshow('Translated Image', translated_img)
    cv2.imshow('Scaled Image', scaled_img)
    cv2.imshow('Sheared Image', sheared_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()# 保存图像
    cv2.imwrite('rotated.jpg', rotated_img)
    cv2.imwrite('translated.jpg', translated_img)
    cv2.imwrite('scaled.jpg', scaled_img)
    cv2.imwrite('sheared.jpg', sheared_img)
    
🎨 代码解析
  1. 加载图片

    • 使用cv2.imread读取图片。
    • 创建一个副本以便进行变换。
  2. 旋转图片

    • 使用cv2.getRotationMatrix2D获取旋转矩阵。
    • 使用cv2.warpAffine应用旋转变换。
  3. 平移图片

    • 定义平移矩阵。
    • 使用cv2.warpAffine应用平移变换。
  4. 缩放图片

    • 使用cv2.resize进行缩放变换。
  5. 剪切图片

    • 定义剪切矩阵。
    • 使用cv2.warpAffine应用剪切变换。
  6. 显示和保存

    • 使用cv2.imshow显示变换后的图像。
    • 使用cv2.imwrite保存变换后的图像。

🎨 显示效果

在这里插入图片描述
在这里插入图片描述

🚀 结语

通过今天的实战演练,大家已经学会了如何使用Python和OpenCV来实现常见的2D变换。这些简单的变换是构建复杂图像处理任务的基础,掌握了它们,你就迈出了计算机视觉应用的第一步!如果你有任何问题或想法,欢迎在评论区留言交流。我们下次再见!喜欢我的文章请关注,点赞和收藏👋



http://www.ppmy.cn/news/1531632.html

相关文章

关于QSizeGrip在ui界面存在布局的情况下的不显示问题

直接重写resizeEvent你会发现:grip并没有显示 void XXXXX::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);this->m_sizeGrip->move(this->width() - this->m_sizeGrip->width() - 3,this->height() - this->m_sizeGrip->…

【FPGA】编程方式

FPGA编程方式 1 什么是PLD?2 什么是颗粒度?3 可编程逻辑器件的编程方式有哪些?3.1 SRAM 编程技术3.2 Flash/EEPROM 编程技术3.3 反熔丝编程技术3.4 编程技术比较 参考资料 1 什么是PLD? 可编程逻辑器件 英文全称为:pr…

Docker部署MongoDB教程

嘿,大家好!今天我在三丰云免费服务器上进行了一次激动人心的MongoDB部署测试。这款免费云服务器1核CPU、1G内存、10G硬盘、5M带宽,是不错的免费服务器选择。 首先,让我们简要介绍一下使用到的Docker和MongoDB软件。Docker是一个开…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型,表示真或假true, false用于条件判断,例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

影刀RPA实战:java结合影刀同步采购订单数据

1.实战目标 本次实战我们用java语言结合影刀,实现从自用ERP系统同步订单到旺店通中,在工作中,有时候我们的运营数据不是直接在旺店通ERP中操作,比如我们有自己的ERP,完成一些特定的内部工作后,再把数据同步…

【Linux】线程同步与互斥

一、线程间互斥 1 .进程线程间的互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部,访问临界资源的代码,就叫做临界区 互斥:任何时刻,互斥保证有且只有一个执行流进入临界…

多路复用和事件轮询机制

多路复用:Nio 服务端只有一个线程处理多个连接 事件轮询机制:select 底层用了 epoll。 select open 调用了 epoll 通过3个方法来实现事件轮询 1.epoll.create 创建epoll 多个集合 2.epoll.ctl 如果有事件会把事件挪到就绪事件列表。 3.epoll.wait 会监听…

使用python获取百度一下,热搜TOP数据详情

一、查找对应链接 # 警告:以下代码仅供学习和交流使用,严禁用于任何违法活动。 # 本代码旨在帮助理解和学习编程概念,不得用于侵犯他人权益或违反法律法规的行为。 1、打开百度页面 百度一下,你就知道 2、点击F12 或 右键鼠标…