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.rowsi1,jsrci,src.colsj1srcsrc.rowsi1,src.colsj1ifflipCode=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转换为GMat
    cv::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;
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村北头的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值