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

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

1. 概述

为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。

2. 接口介绍

resize()

图像缩放函数,用于把图像按指定的尺寸放大或缩小。

dst = cv2.resize(src, dsize, fx, fy, interpolation)

dst = 生成的目的图像

src:需要变换的原图像

disize:(x, y)需要变换图像的尺寸,直接填

fx,fy:缩放因子,与disize会冲突,通常只需要二选一即可

interpolation:插值算法,用于缩放的算法。默认为双线性插值。

缩放算法参数

效果越好的算法运算越复杂,效果越好。反之相反。

import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 修改图像大小:fx,fy可以省略,默认为双线性插值
lina2 = cv2.resize(lina, (700, 700))
# 使用缩放因子,需要指定参数,并且dsize传空
lina3 = cv2.resize(lina, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)
cv2.imshow('lina', lina)
cv2.imshow('lina3', lina3)
cv2.waitKey(0)


flip()

图像翻转函数,讲图像上下翻转,左右翻转

img1 = cv2.flip(img,flipCode)

img:需要翻转的图片

flipCode:值为0,上下翻转;值>0,左右翻转;值<0,上下左右一起翻转。

import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 上下翻转
lina_0 = cv2.flip(lina, 0)
# 左右翻转
lina_1 = cv2.flip(lina, 1)
# 上下左右翻转
lina_01 = cv2.flip(lina, -1)
cv2.imshow('lina', lina)
cv2.imshow('lina_0', lina_0)
cv2.imshow('lina_1', lina_1)
cv2.imshow('lina_01', lina_01)
cv2.waitKey(0)


rotate()

将图片按顺时针逆时针旋转一定角度

img2 = cv2.rotate(img, rotateCode)

img:需要旋转的图片

rotateCode:含义分别为:顺时针转90,180度,逆时针转90度。

rotateCode

import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 顺时针转90
lina_90 = cv2.rotate(lina, cv2.ROTATE_90_CLOCKWISE)
# 顺时针转180
lina_180 = cv2.rotate(lina, cv2.ROTATE_180)
# 顺时针转270,逆时针转90
lina_270 = cv2.rotate(lina, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('lina', lina)
cv2.imshow('lina_90', lina_90)
cv2.imshow('lina_180', lina_180)
cv2.imshow('lina_270', lina_270)
cv2.waitKey(0)


仿射变换

仿射变换是图像旋转、缩放、平移的总成。

warpAffine()

img2 = cv2.warp(src, M, dsize, flags, mode, value)

src:需要变换的图像

M:进行变换的矩阵,变换成什么样子由M决定,可以由特定接口来求。

dsize:输出图像的尺寸

flags:与resize函数的缩放算法一致,默认为双线性插值。

mode:边界处标志

value:填充边界的值

后三个参数一般都用默认,主要使用前3个参数

getRotationMatrix2D()-变换矩阵1

求变换矩阵M的函数,主要用于旋转

M = cv2.getRotationMatrix2D(center, angle, scale)

center:中心点,按住哪个点进行旋转

angle:旋转的角度(逆时针旋转)

scale:缩放比例,1.0不缩放

import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 变换前要求出变换矩阵
M = cv2.getRotationMatrix2D((200, 200), 30, 1.0)
lina2 = cv2.warpAffine(lina, M, (474, 474))
cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)
cv2.waitKey(0)


getAffineTransform()-变换矩阵2

求变换矩阵M,主要是用于平移+旋转,利用三个坐标点前后变化来确定一个平面的变化

M = cv2.getAffineTransform(src[], dst[])

src:源坐标点,以列表的形式传入(数据格式一定为float32

dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as np
lina = cv2.imread('./image/lina.jpg')
print(lina.shape)
# 变换前要求出变换矩阵
# 坐标一定要是32位的小数!!否则会报错
src = np.float32([[0, 0], [0, 100], [100, 0]])
dst = np.float32([[50, 50], [50, 150], [200,50]])
M = cv2.getAffineTransform(src, dst)
lina2 = cv2.warpAffine(lina, M, (474, 474))
cv2.imshow('lina', lina)
cv2.imshow('lina2', lina2)
cv2.waitKey(0)

透视变换

完全改变物体的位置和形状,需要四个坐标点。一般用来调整图片的位置。

warpPerspective()

用于透视变换的主函数

img2 = cv2.warpPerspective(img, M, dsize, …)

img:需要进行变换的图像

M:进行透视变换的矩阵

dsize:输出图片的大小

getPerspectiveTransform()

用来求透视变换的矩阵,需要四个点

M = cv2.getPerspectiveTransform(src[], dst[])

src:源坐标点,以列表的形式传入(数据格式一定为float32

dst:变换后图的坐标,以列表的形式传入(数据格式一定为float32

import cv2
import numpy as np
work = cv2.imread('./image/work.jpg')
# 将图片调整到适合大小
work = cv2.resize(work, (700, 700), interpolation=cv2.INTER_AREA)
# 设置适当变换坐标,求出变换矩阵
src = np.float32([[210, 20], [700, 110], [0, 660], [600, 700]])
dst = np.float32([[0, 0], [700, 0], [0, 700], [700, 700]])
M = cv2.getPerspectiveTransform(src, dst)
# 进行透视变换
work2 = cv2.warpPerspective(work, M, (700, 700))
cv2.imshow('work', work)
cv2.imshow('work2', work2)
cv2.waitKey(0)

变换后如图所示,将主要图片变正了

以上就是图像变换的简单介绍,如果有疑问,欢迎在评论区讨论哦。

目录
相关文章
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
671 20
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4405 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
354 4
|
12月前
|
人工智能 算法 计算机视觉
Python 图像处理技巧
本文介绍了Python图像处理中需要掌握的15个基本技能,涵盖图像读取与保存、颜色空间转换、裁剪与调整大小、滤波与平滑、边缘检测、阈值处理、形态学操作、直方图处理、特征检测与描述、图像配准与特征匹配、轮廓检测与分析、图像分割、模板匹配、透视变换与仿射变换以及傅里叶变换等内容。通过OpenCV、Pillow和Matplotlib等库实现相关功能,为图像处理提供了全面的基础指导。
299 0
|
监控 Java 计算机视觉
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
717 1
|
机器学习/深度学习 算法 数据可视化
Python的计算机视觉与图像处理
本文介绍了Python在计算机视觉和图像处理领域的应用,涵盖核心概念、算法原理、最佳实践及应用场景。重点讲解了OpenCV、NumPy、Pillow和Matplotlib等工具的使用,并通过代码实例展示了图像读写、处理和可视化的方法。实际应用包括自动驾驶、人脸识别、物体检测等。未来趋势涉及深度学习、边缘计算和量子计算,同时也讨论了数据不足、模型解释性和计算资源等挑战。
713 2
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
567 7
|
计算机视觉 开发者 Python
使用Python进行简单图像处理
【8月更文挑战第31天】 本文将介绍如何使用Python编程语言来处理图像。我们将通过代码示例来展示如何读取、显示、编辑和保存图像文件。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供一个清晰的指引,帮助你开始自己的图像处理项目。

推荐镜像

更多