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

智能推荐

MySQL日志之redolog详解【带你了解redolog的使命和使用】_小道仙97的博客-程序员宝宝_redolog的作用

MySQL在innodb引擎下,所做的增删改查都是先去`buffer pool`缓冲池(内存区域)里面操作,再通过种种情况去进行入盘(数据存入磁盘),因为增删改都是在内存操作,这样就存在系统异常导致数据丢失的情况,redolog就是为了解决系统异常导致内存修改丢失的问题

checkbox选中触发事件_Peppa_的博客-程序员宝宝_checkbox选中触发事件

$(function(){ if ($.browser.msie) { $('input:checkbox').click(function () { this.blur(); this.focus(); }); }; $("#check").change(function() { alert("checked"); }); ...

数据结构习题——DFS非递归/判断一个无向图G是否为一颗树_pkxxxxxxxx的博客-程序员宝宝

前言日常输出一些题目正文题目一:编写DFS非递归void unrc_DFS(ALGraph G,int v){ ArcNode *p; initStack(s); visited[v]=true; push(s,v); while(!isEmpty(s)){ pop(s,p);visit(p);//弹出栈顶结点并访问 p=G.vertices[v].firstarc ...

SpringMVC 增删改查实例_二月的微笑的博客-程序员宝宝

MVC布局格式:1.MVC包的创建格式(https://img-blog.csdnimg.cn/20181108082144443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDU1NDEw,size_16,color...

ExcelVBA:利用SUMIF和OFFSET+MATCH进行多条件求和_hbjmxjj88的博客-程序员宝宝_vba多条件求和

这个源于兰版的一道题:http://www.excelpx.com/thread-167680-1-2.html效果如下: 利用以下数组公式即可得到结果:=SUMIF(B2:I2,B2:C2,OFFSET(B2:I2,MATCH(A3:A6,A12:A15,),))选中B12:B15,输入公式,然后按Ctrl+Shift+Enter确认输入即可。这个公式充分

shell变量与数字运算_qq_34500270的博客-程序员宝宝

shell变量与数字运算,变量与数字不能直接运算。变量与数字直接运算,结果是play+1,如下所示:play=2play=play+1echo $play#输出结果play+1加上let 后,运算结果正确,示例如下:play=2let play=play+1echo $play#输出结果3shell变量不支持如下运算:play=2play +=1...

随便推点

TIPTOP——TIPTOP拆件式工单简介_fmx121586的博客-程序员宝宝_拆件式工单

拆件式工单简介拆件式工单定义1.拆件式工单定义:  将成品拆件还原为多项原料2.举例:有个成品料号为A,由半成品B和C组成。成品A质量不良,被厂家退货,入到公司不良品仓。情况:其中半成品B为不良品,C为良品,需重工。1.开立拆件式工单:产品A。2.工单成套领料:将成品A从不良品仓领出。3.通过拆件式完工入库,将半成品B入不良品仓,半成品C入良品仓。

《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载_程序新视界的博客-程序员宝宝

在《Drools7.0.0.Final规则引擎教程》之Springboot集成中文名介绍了怎样将Drools与Springboot进行集成,本篇博客介绍一下集成之后,如何实现从数据库读取规则并重新加载规则的简单demo。因本章重点介绍的是Drools相关操作的API,所有将查询数据库部分的操作省略,直接使用数据库查询出的规则代码来进行规则的重新加载。另外,此示例采用访问一个http请求来进行重新加载

docker-compose下的java应用启动顺序两部曲之一:问题分析_程序员欣宸的博客-程序员宝宝

在docker-compose编排多个容器时,需要按实际情况控制各容器的启动顺序,本文分析启动顺序的重要性,以及启动顺序有问题时会有什么样的影响,再给出临时解决的和官方推荐的两种解决方案,为下一篇的实战做好铺垫。

网络基础学习笔记一------TCP通信之客户端_薛123的博客-程序员宝宝

客户端一、创建本地套接字m_sockRecv.Create();二、发起连接请求BOOL fC = m_sockRecv.Connect("127.0.0.1",5802);三、启动定时器,定时接收数据SetTimer(1,500,NULL);void CSocket_clientDlg::OnTimer(UINT nIDEvent) {// TOD

记录IDEA创建springMVC时自己遇到的一个访问index.jsp出现404问题的解决+改变默认访问页面_FoolishBird-007的博客-程序员宝宝

1.先将项目配置的tomcat配置改动一下:将Application context路径改为:/下图我圈起来了:2.再将URL改为 :http://localhost:8080/index.jsp这样默认启动就是访问刚才那个路径页面了:...

平面设计【PS】汉堡寿司横幅PSD分层模版素材_h248137333的博客-程序员宝宝

今天给大家分享汉堡寿司横幅模版分层素材,大小【580M】格式【PSD\JPG】,这套素材适合相关设计行业需要。链接:https://pan.baidu.com/s/1ODkMLz_3QQ4hLUk0a6wPqQ提取码:glq0​更多素材【爱图素素】微博领取...

推荐文章

热门文章

相关标签