OpenCV图像翻转:flip()函数的使用

功能描述

flip()函数翻转一个二维的矩阵,包含垂直翻转,水平翻转,以及垂直水平翻转,

函数 cv::flip 以以下三种方式之一翻转矩阵(行和列索引从0开始):

\texttt{dst} _{ij} = \left\{ \begin{array}{l l} \texttt{src} _{\texttt{src.rows}-i-1,j} & if\; \texttt{flipCode} = 0 \\ \texttt{src} _{i, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} > 0 \\ \texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} < 0 \\ \end{array} \right.

函数使用示例方案如下:

  • flipCode =0,垂直翻转图像,是源图像的top-left(左上)和bottom-left(左下)的交换,也就是说左上变成了左下,左下变成了左上,这是一个典型在的 Microsoft Windows操作系统里的视频处理操作。

  • flipCode > 0,图像的水平翻转,随后的水平位移和绝对方差计算,是为了检查图像是否y轴对称。

  • (flipCode < 0),图像同时垂直翻转和水平翻转,是为了以后的位移和绝对方差计算去检查图像是否是中心对称。

  • 反转点阵队列的顺序(flipCode > 0 或flipCode == 0).

原型

CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);

参数释义

  • 参数 src 输入矩阵.

  • 参数 dst 输出矩阵,和输入矩阵一样大小。

  • 参数 flipCode 一个标志,决定怎么翻转矩阵; 0 是围绕着x轴翻转,正直是围绕着y轴翻转,负值是围绕着两个轴一起翻转。 around both axes.

  • 参考 transpose , repeat , completeSymm

源码示例

#include <iostream>
#include <opencv2/opencv.hpp>
​
int main()
{
    cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");
    cv::Mat image_fliped;
    cv::flip(image, image_fliped, 0);
​
    cv::imshow("原图 juice", image);
    cv::imshow("垂直翻转 围绕x轴 juice", image_fliped);
​
    cv::flip(image, image_fliped, 1);
    cv::imshow("水平翻转 围绕Y轴 juice", image_fliped);
​
    cv::flip(image, image_fliped, -1);
    cv::imshow("水平翻转、垂直翻转同时 围绕X、Y轴 juice", image_fliped);
​
    cv::waitKey(0);
    return 0;
}

运行结果

垂直翻转 围绕x轴:

水平翻转 围绕Y轴

水平翻转、垂直翻转同时 围绕X、Y轴

猜你喜欢

转载自blog.csdn.net/jndingxin/article/details/109493173