【opencv&VS2008】关于cvFlip的那些事

Flip
垂直,水平或即垂直又水平翻转二维数组

void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0);
#define cvMirror cvFlip

src
原数组.
dst
目标责任制数组. 如果 dst = NULL 翻转是在内部替换.
flip_mode
指定怎样去翻转数组。
flip_mode = 0 沿X-轴翻转, flip_mode > 0 (如 1) 沿Y-轴翻转, flip_mode < 0 (如 -1) 沿X-轴和Y-轴翻转.见下面的公式
函数cvFlip 以三种方式之一翻转数组 (行和列下标是以0为基点的):

dst(i,j)=src(rows(src)-i-1,j) if flip_mode = 0
dst(i,j)=src(i,cols(src1)-j-1) if flip_mode > 0
dst(i,j)=src(rows(src)-i-1,cols(src)-j-1) if flip_mode < 0
函数主要使用在:
垂直翻转图像(flip_mode > 0)用于 顶-左和底-左图像结构的转换, 主要用于WIN32系统下的视频操作处理.  
flip_mode= 0时,图像只会绕X轴旋转
flip_mode> 0时,图像只会绕Y轴旋转

flip_mode<0时, 图像会绕X轴和Y轴旋转


一:

flip_code= 0 图像只会绕X轴旋转

// cvFlip的使用.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "opencv2/opencv.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
        //创建窗口
    cvNamedWindow("src");
        cvNamedWindow("dst");
    // 定义src、dst
        IplImage* src;
        IplImage* dst;
    //加载图片
        src= cvLoadImage("F://Opencv_picture//a.jpg");
        //创建dst
    dst= cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

        //定义flip_code和赋值
         int flip_code= 0;
    //使用cvFlip
    cvFlip(src, dst, flip_code);
     //显示图像
         cvShowImage("src", src);
         cvShowImage("dst", dst);

         cvWaitKey(0);

         cvReleaseImage(&src);
         cvDestroyWindow("src");

        return 0;
}

结果图:

二:flip_mode> 0时,图像只会绕Y轴旋转
假设flip_code=1;

// cvFlip的使用.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2/opencv.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
        //创建窗口
    cvNamedWindow("src");
        cvNamedWindow("dst");
    // 定义src、dst
        IplImage* src;
        IplImage* dst;
    //加载图片
        src= cvLoadImage("F://Opencv_picture//a.jpg");
        //创建dst
    dst= cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

        //定义flip_code和赋值
         int flip_code= 1;
    //使用cvFlip
    cvFlip(src, dst, flip_code);
     //显示图像
         cvShowImage("src", src);
         cvShowImage("dst", dst);

         cvWaitKey(0);

         cvReleaseImage(&src);
         cvDestroyWindow("src");

        return 0;
}

结果图:


三:flip_mode<0时, 图像会绕X轴和Y轴旋转
假设flip_code= -1时

// cvFlip的使用.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2/opencv.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
        //创建窗口
    cvNamedWindow("src");
        cvNamedWindow("dst");
    // 定义src、dst
        IplImage* src;
        IplImage* dst;
    //加载图片
        src= cvLoadImage("F://Opencv_picture//a.jpg");
        //创建dst
    dst= cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

        //定义flip_code和赋值
         int flip_code= -1;
    //使用cvFlip
    cvFlip(src, dst, flip_code);
     //显示图像
         cvShowImage("src", src);
         cvShowImage("dst", dst);

         cvWaitKey(0);

         cvReleaseImage(&src);
         cvDestroyWindow("src");

        return 0;
}

结果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值