龙空技术网

手把手实现opencv的功能(1)——flip

h578272581 55

前言:

目前兄弟们对“flip方法”大概比较关怀,看官们都需要了解一些“flip方法”的相关内容。那么小编同时在网上搜集了一些关于“flip方法””的相关知识,希望朋友们能喜欢,看官们一起来了解一下吧!

opencv中的flip功能是实现图像水平、垂直及水平垂直翻转,应用方法为:

void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0)

其中:

src是原始图像数据

dst目标图像数据,如果dst为NULL,则在原始图像上操作

flip_mode指定怎样去翻转数组,flip_mode = 0 沿X-轴翻转, flip_mode > 0 (如 1)沿 Y-轴翻转,flip_mode < 0 (如 -1)沿X-轴和Y-轴翻转。

翻转公式如下

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

翻转1维指针数组的顺序(flip_mode > 0)

功能模块具体实现流程如下:

#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;void uflit(Mat& src, Mat& dst, int flipcode=-1){    int rows = src.rows, cols = src.cols, channels = src.channels();    src.convertTo(dst, src.type());    Mat uimg = dst;    if(flipcode<=0)    {        for(int channel=0; channel<channels; ++channel)            for(int row=0; row<rows; ++row)            {                for(int col=0; col<cols*channels/2; )                {                    auto tmp = uimg.data[row*cols*channels+col+channel];                    uimg.data[row*cols*channels+col+channel] = uimg.data[row*cols*channels+(cols-1)*channels-col+channel];                    uimg.data[row*cols*channels+(cols-1)*channels-col+channel] = tmp;                    col += 3;                }            }    }    if(flipcode!=0)    {        for(int channel=0; channel<channels; ++channel)            for(int row=0; row<rows/2; ++row)            {                for(int col=0; col<cols*channels; ++col)                {                    auto tmp = uimg.data[row*cols*channels+col+channel];                    uimg.data[row*cols*channels+col+channel] = uimg.data[(rows-row-1)*cols*channels+col+channel];                    uimg.data[(rows-row-1)*cols*channels+col+channel] = tmp;                }            }    }}int main() {    Mat img = imread("img.jpg"), uimg;    uflip(img, uimg);    return 0;}

原始图像

uflip实现的图像水平垂直翻转

opencv自带flip实现的水平垂直翻转

可以看出基本功能已经能够实现。

标签: #flip方法