几何变换之仿射---OpenCV-Python开发指南(12)

简介: 几何变换之仿射---OpenCV-Python开发指南(12)

仿射


OpenCV中,仿射变换是指图像经过一系列的几何变换来实现的平移,旋转等多种操作。该变换能够保持图像的平直性与平行性。平直性是指图像经过仿射变换后,直线仍然是直线;平行性是指图像在完成仿射变换后,平行性依然是平行线。


在OpenCV中,它给我们提供的仿射函数为cv2.warpAffine(),其通过一个变换矩阵M实现,对于矩阵运算不大了解的,可以记住后面讲解的,也可以学习离散数学或线性代数,两者都讲解到了矩阵运算。


仿射函数的定义如下:

def warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None):

src:代表要仿射的原始图像


M:代表一个2*3的变换矩阵,使用不同的变换矩阵,就可以实现不同的仿射变换。


dszie:代表输出图像的尺寸大小。


dst:代表仿射后的输出图像


flags:代表插值方法,默认为INTER_LINEAR。当该值为WARP_INVERSE_MAP时,意味着M是逆变换类型,实现从目标图像dst到原始图像src的逆变换。详细参数,上篇博文表格就是。


borderMode:代表边类型,默认为BORDER_CONSTANT。当该值为BORDER_TRANSPARENT时,意味着目标图像内的值不做改变,这些值对应原始图像内的异常值。


borderValue:代表边界值,默认是0。


综上所示,我们常用的参数为:src,M,dsize。


平移


已知仿射公式为:


假设我们现在要将图像向右平移50个像素,向下平移100个像素,那么公式替换后如下所示:


dst(x,y)=src(x+50,y+100)


dst(x,y)=src(1x,+0y+50,0x+1y+100)


得到M中的各个元素值为:


M11=1


M12=0


M13=50


M21=0


M22=1


M23=100


综上所述,右平移50个像素,向下平移100个像素的变换矩阵为:



已知变换矩阵与原始图像,那么很简单的我们就可以完成图像的平移操作,具体代码如下所示:

import cv2
import numpy as np
img = cv2.imread("4.jpg")
h, w = img.shape[:2]
x = 50
y = 100
M = np.float32([[1, 0, x], [0, 1, y]])
move_img = cv2.warpAffine(img, M, (w, h))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()


运行之后,效果如下所示:


旋转


在使用函数cv2.warpAffine()对图像进行旋转时,可以通过函数cv2.getRotationMatrix2D()获取转换矩阵。该函数的语法格式为:


def getRotationMatrix2D(center, angle, scale):


center:为旋转的中心


angle:为旋转的角度,正数表示逆时针旋转,负数表示顺时针旋转


scale:为变换尺寸(也就是前文说的缩放大小)


下面,我们来将上图在旋转45度,具体代码如下所示:

import cv2
img = cv2.imread("4.jpg")
h, w = img.shape[:2]
M = cv2.getRotationMatrix2D((w / 2, h / 2), 45, 0.6)
move_img = cv2.warpAffine(img, M, (w, h))
cv2.imshow("img", img)
cv2.imshow("move_img", move_img)
cv2.waitKey()
cv2.destroyAllWindows()


更改M变换矩阵就行,这里(w / 2, h / 2)为图像的中心坐标,45为正数,就是逆时针旋转45度,0.6就是将图像缩放0.6倍。


运行之后,效果如下所示:

相关文章
|
2月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
6月前
|
数据采集 JavaScript 前端开发
Web爬虫开发指南:使用Python的BeautifulSoup和Requests库
Web爬虫是一种从互联网上获取数据的自动化工具,它可以用于抓取网页内容、提取信息和分析数据。Python提供了一些强大的库,其中BeautifulSoup和Requests是两个常用的工具,用于解析HTML内容和发起HTTP请求。本文将介绍如何使用BeautifulSoup和Requests库构建一个简单而有效的Web爬虫。
|
6月前
|
前端开发 API 数据库
Python网站开发指南:构建现代化、高效的Web应用
在当今数字化时代,网站已成为企业、组织以及个人展示自己的重要窗口。Python作为一种简洁、高效且易于学习的编程语言,被广泛运用于网站开发领域。本文将向您介绍如何使用Python进行网站开发,包括常用的Web框架、关键技术和最佳实践。
|
API 计算机视觉 异构计算
|
算法
实现人脸美白算法---OpenCV-Python开发指南(59)
实现人脸美白算法---OpenCV-Python开发指南(59)
467 0
实现人脸美白算法---OpenCV-Python开发指南(59)
|
算法 Python
实现人脸磨皮算法---OpenCV-Python开发指南(58)
实现人脸磨皮算法---OpenCV-Python开发指南(58)
408 0
实现人脸磨皮算法---OpenCV-Python开发指南(58)
|
计算机视觉
实现抖音慢动作效果---OpenCV-Python开发指南(57)
实现抖音慢动作效果---OpenCV-Python开发指南(57)
180 1
|
计算机视觉
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
139 1
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
|
算法
实现抖音霓虹灯效果---OpenCV-Python开发指南(55)
实现抖音霓虹灯效果---OpenCV-Python开发指南(55)
219 0
实现抖音霓虹灯效果---OpenCV-Python开发指南(55)