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

发布时间:2024年01月17日

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

  • 水平翻转:将图像沿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);

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

文章来源:https://blog.csdn.net/sswss12345/article/details/135545543
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。