【Emgu CV教程】5.4、几何变换之图像翻转

今天讲解的两个函数,可以实现以下样式的翻转。

  • 水平翻转:将图像沿Y轴(图像最左侧垂直边缘)翻转的操作。原始图像中位于左侧的内容将移动到目标图像的右侧,原始图像中位于右侧的内容将移动到目标图像的左侧。
  • 垂直翻转:将图像沿X轴(图像最下面水平边缘)翻转的操作。原始图像中位于下面的内容将移动到目标图像的上面,原始图像中位于上面的内容将移动到目标图像的下面。
  • 转置:逆时针旋转90度,再垂直翻转。
  • 顺时针旋转90度。

下面逐个举例,还是以 哈士奇.jpg为例,原始图像宽557,高399,如下:

1、Transpose()转置函数

Transpose()函数是转置函数,可以将图片逆时针旋转90度,再垂直翻转一次。用法非常简单:

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
CvInvoke.Transpose(tempMat, dstMat); // 就是逆时针旋转90度
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);

执行一次Transpose()函数,输出图像如下:

2、Flip()翻转函数

函数的定义如下:

public static void Flip( 
    IInputArray src,  // 输入图像 
    IOutputArray dst,  // 输出图像 
    FlipType flipType // 旋转类型
)

注意哈,FlipType反转类型有Vertical、Horizontal、Both三种,也就是可以让图像垂直翻转、水平翻转、垂直+水平同时翻转。

以水平翻转为例,代码如下:

Mat dstMat = srcMat.Clone();
CvInvoke.Flip(dstMat, dstMat, FlipType.Horizontal);
CvInvoke.Imshow("Result Mat,FlipType.Horizontal, " + dstMat.Size.ToString(), dstMat);

翻转后的效果如下图: 

垂直翻转和水平+垂直同时翻转的效果,分别是:

3、顺时针旋转90度

刚才讲的Transpose()函数,执行一次的效果是逆时针旋转90度再垂直翻转,那怎么能实现只顺时针旋转90度呢,Emgu CV里面没有直接顺时针旋转90度的函数,但是Transpose()和Flip()函数配合就OK啦。解释起来太空洞,我在PPT里画了一个演示。

  • 第一种方式就是用PPT的顺时针旋转功能,一步到胃,顺时针旋转90度。
  • 第二种方式就是先用Flip()函数垂直翻转,再用Transpose()转置。

代码就是这样,读者们自己试试吧。

Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
CvInvoke.Flip(tempMat, dstMat, FlipType.Vertical);
CvInvoke.Transpose(dstMat, dstMat); // 再转置一下
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);

 原创不易,请勿抄袭。共同进步,相互学习。  

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值