OpenCV 图形API(72)图像与通道拼接函数-----根据指定的方式翻转图像(GMat)函数 flip()
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
翻转一个2D矩阵,围绕垂直轴、水平轴或同时围绕两个轴。
该函数以三种不同的方式之一翻转矩阵(行和列的索引是从0开始的):
dst i j = { src src.rows − i − 1 , j i f flipCode = 0 src i , src.cols − j − 1 i f flipCode > 0 src src.rows − i − 1 , src.cols − j − 1 i f flipCode < 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. dstij=⎩ ⎨ ⎧srcsrc.rows−i−1,jsrci,src.cols−j−1srcsrc.rows−i−1,src.cols−j−1ifflipCode=0ifflipCode>0ifflipCode<0
使用该函数的一些示例场景如下:
- 当 flipCode == 0 时,图像的垂直翻转用于在左上角和左下角图像原点之间切换。这是在 Microsoft Windows* 操作系统上进行视频处理的典型操作。
- 当 flipCode > 0 时,对图像进行水平翻转,然后进行水平位移并计算绝对差值以检查是否存在垂直轴对称性。
- 当 flipCode < 0 时,同时进行水平和垂直翻转,然后进行位移并计算绝对差值以检查是否存在中心对称性。
反转点数组的顺序(flipCode > 0 或 flipCode == 0)。
输出图像必须与输入图像具有相同的深度,尺寸应根据给定的 flipCode 正确设置。
注意:
函数的文字ID是 “org.opencv.core.transform.flip”
函数原型
GMat cv::gapi::flip
(const GMat & src,int flipCode
)
参数
- 参数 src: 输入矩阵。
- 参数 flipCode: 一个标志,指定如何翻转数组;0表示绕x轴翻转,正值(例如1)表示绕y轴翻转。负值(例如-1)表示同时绕两个轴翻转。
代码示例
#include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>int main()
{// 创建一个测试图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );if ( img.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 定义翻转模式,例如沿Y轴翻转(水平翻转)int flipCode = 1; // 0: 垂直翻转, 1: 水平翻转, -1: 同时垂直和水平翻转// 将cv::Mat转换为GMatcv::GMat in;auto flipped = cv::gapi::flip( in, flipCode );// 定义并编译G-API图cv::GComputation flip_comp( cv::GIn( in ), cv::GOut( flipped ) );cv::Mat flipped_img;// 应用G-API图到输入图像flip_comp.apply( cv::gin( img ), cv::gout( flipped_img ) );// 显示原始和翻转后的图像cv::imshow( "Original Image", img );cv::imshow( "Flipped Image", flipped_img );cv::waitKey();return 0;
}