今天讲解的两个函数,可以实现以下样式的翻转。
下面逐个举例,还是以?哈士奇.jpg为例,原始图像宽557,高399,如下:
Transpose()函数是转置函数,可以将图片逆时针旋转90度,再垂直翻转一次。用法非常简单:
Mat tempMat = srcMat.Clone();
Mat dstMat = new Mat();
CvInvoke.Transpose(tempMat, dstMat); // 就是逆时针旋转90度
CvInvoke.Imshow("Result Mat, " + dstMat.Size.ToString(), dstMat);
执行一次Transpose()函数,输出图像如下:
函数的定义如下:
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);
翻转后的效果如下图:?
垂直翻转和水平+垂直同时翻转的效果,分别是:
刚才讲的Transpose()函数,执行一次的效果是逆时针旋转90度再垂直翻转,那怎么能实现只顺时针旋转90度呢,Emgu CV里面没有直接顺时针旋转90度的函数,但是Transpose()和Flip()函数配合就OK啦。解释起来太空洞,我在PPT里画了一个演示。
代码就是这样,读者们自己试试吧。
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);
?原创不易,请勿抄袭。共同进步,相互学习。??