cv2.getRotationMatrix2D()和cv2.warpAffine()_shelleyHLX的博客-程序员宝宝

技术标签: 变换  

 cv2.getRotationMatrix2D()

图像的旋转矩阵一般为:

                                                                     M=\begin{pmatrix} cos(\theta) \qquad -sin(\theta)& \\ sin(\theta) \qquad cos(\theta) & \end{pmatrix}
但是单纯的这个矩阵是在原点处进行变换的,为了能够在任意位置进行旋转变换,opencv采用了另一种方式:

                                                     M=\begin{pmatrix} \alpha & -\beta &(1-\alpha)center_x-\beta center_y \\ -\beta& \alpha &\beta center_x-(1-\alpha) center_y \\ \end{pmatrix}
为了构造这个矩阵,opencv提供了一个函数:
cv2.getRotationMatrix2D(),这个函数需要三个参数,旋转中心,旋转角度,旋转后图像的缩放比例,比如下例:

import cv2 
import matplotlib.pyplot as plt 
 
img = cv2.imread('flower.jpg') 
rows,cols = img.shape[:2] 
#第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例 
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1) 
#第三个参数:变换后的图像大小 
res = cv2.warpAffine(img,M,(rows,cols)) 
 
plt.subplot(121) 
plt.imshow(img) 
plt.subplot(122) 
plt.imshow(res)

cv2.warpAffine()

cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))

src - 输入图像。
M - 变换矩阵。
dsize - 输出图像的大小。
flags - 插值方法的组合(int 类型!)
borderMode - 边界像素模式(int 类型!)
borderValue - (重点!)边界填充值; 默认情况下,它为0。

上述参数中:M作为仿射变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵。

flages表示插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)

日常进行仿射变换时,在只设置前三个参数的情况下,如 cv2.warpAffine(img,M,(rows,cols))可以实现基本的仿射变换效果,但可以出现“黑边”现象,如图:

这对后续的处理往往造成很大的困扰,第六个参数可以选择填充的颜色,默认为黑色。在python中设置warpAffine的参数与c++中有所不同,必须指明参数的名称,具体如下:

c++中:warpAffine(src,img,M,Size(a,b),1,0,Scalar(255,255,255));

python中:

cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))

在python 中有一个好处是不必按顺序设置,直接指明所设置的参数即可,如将上述图片边界区域填充为白色:

cv2.warpAffine(img,M,(lengh,lengh),borderValue=(255,255,255))

from:

https://blog.csdn.net/weixin_41010198/article/details/88424163

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27009517/article/details/112349980

智能推荐

西安电子科技大学出版社 线性代数 参考答案 刘三阳_larry6799的博客-程序员宝宝

 腾讯微云:链接:https://share.weiyun.com/5UAd92A 密码:52zmv8

导航,头部,CSS基础_weixin_33859665的博客-程序员宝宝

制作自己的导航条。HTML头部元素:<base> 定义了页面链接标签的默认链接地址<style> 定义了HTML文档的样式文件<link> 定义了一个文档和外部资源之间的关系练习样式表:行内样式表内嵌样式表外部样式表分别练习定义三类选择器:HTML 选择器CLASS 类选择器ID 选择器&...

Nginx 增加nginx_lua_module模块_IChen.的博客-程序员宝宝

版本说明:NGINX:V1.14.0LuaJIT:V2.1.0ngx_devel_kit:V0.3.0lua_nginx_module:V0.10.13安装步骤:1. 下载安装LuaJIT 2.1(2.0或者2.1都是支持的,官方推荐2.1):http://luajit.org/download.htmlcd /usr/local/srcwget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gztar -zxv

CentOS 初体验十四:阿里云安装Gitlab_赵彦军的博客-程序员宝宝

转载请注明出处http://blog.csdn.net/zhaoyanjun6/article/details/79144175 本文出自【赵彦军的博客】 非Unix操作系统(Windows)GitLab是专为Unix操作系统开发的。 GitLab 不可 运行在Windows操作系统上,而且我们近期也没有考虑支持Windows。 你可以在Linux虚拟机上或者Docker上来安

2D景观转3D风景大片,无惧复杂光线与遮挡,人类离「躺着旅行」的梦想又近了一步..._3D视觉工坊的博客-程序员宝宝

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达整理:公众号@机器之心本文仅做学术分享,如有侵权,请联系删除。万物皆可转 3D。上班的时候想旅行,休假的时候想躺着,这是大多数年轻人...

随便推点

TX2入门教程基础篇-备份和恢复_uav-friend的博客-程序员宝宝

转载: https://www.ncnynl.com/archives/201706/1740.htmlTX2入门教程基础篇-备份和恢复说明:介绍如何为TX2进行备份和恢复(0)准备:准备好利用Jetpack刷过机的Ubuntu的主机(HOST PC)在利用Jetpack刷机时候,建立目录TX2,并保存有JetPack-L4T-*-linux-x64.run文件再进行第一次刷机之后会增加其他目录,...

JNI_Onload的实现_toddmi的博客-程序员宝宝

http://stackoverflow.com/questions/2453692/jni-loses-reference-to-native-methodsvoid onChange(JNIEnv *, jobject, jfloat);JNINativeMethod methods[] = {    {"onChange", "(F)V", (void *)onC

Qt学习_zeronef的博客-程序员宝宝

Qt下载Qt安装Qt Creator的初步使用编写第一个Qt程序

AttributeError: module ‘pandas‘ has no attribute ‘isna‘_craftsman2020的博客-程序员宝宝

文章目录问题描述:原因及解决办法:问题描述:场景:import pandas as pdimport numpy as np# nan in seriess1 = pd.Series([1, 2, np.nan, 3, 4], index=['A', 'B', 'C', 'D', print(pd.isna(s1[2]))报错截图:原因及解决办法:pandas在0.20之前的版本是没有isna的,在0.20版本中才开始有了pandas.isna()。所以先查看下pandas版本,发

Easy Redmine 的文本格式转换 - 从 Textile 到 Html _weixin_33970449的博客-程序员宝宝

目前 Redmine 支持的文本格式有 Textile 和 Markdown, 然而两种格式在编辑时都不支持所见即所得,与主流的所见即所得富文本编辑器相比,客户体验较差。而且在 Redmine 中,虽然可以设置选择 Textile 或 Markdown, 但在整个系统中只能选择一种文本格式,且没有两种格式相互转换的功能。这样对于一直使用 Textile ...

解决:FLASK中Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'_网络毒刘的博客-程序员宝宝

Flask项目中使用mysql数据库启动项目是发出警告:Warning: (1366, “Incorrect string value: ‘\xD6\xD0\xB9\xFA\xB1\xEA…’ for column ‘VARIABLE_VALUE’ at row 479/480/481”)但是项目可以正常启动使用如果想将次警告去掉需要导入一个模块解决方法:下载数据库驱动:...