opencv-图像反转和翻转

/*
Name    : ImageReverseAndRollover.cpp
Function: 读入bmp图像文件,进行图像反转和翻转,并在屏幕上显示
*/
/*========================================OpenCV实现图像翻转=====================================
参考http://hi.baidu.com/cateyefish/item/60167fcddfe8a52ce80f2e2a进行修改
cvFlip函数
垂直,水平,垂直同时水平翻转二维数组三种功能

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 : 沿Y轴翻转 
flip_mode < 0 : 沿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),使用连续的水平转换和绝对值差检查垂直轴对称
水平和垂直同时转换(flip_mode < 0),用于连续的水平转换和绝对真理值差检查中心对称 
翻转1维指针数组的顺序(flip_mode > 0) 
*/
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()   
{   
IplImage *pSrcImg = NULL;   
IplImage *pRolloverlnImg = NULL;
IplImage *pRoverselnImg = NULL;

pSrcImg = cvLoadImage("D:\lena.bmp",0); 
//cvLoadImage( filename, -1 ); 默认读取图像的原通道数
//cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图
//cvLoadImage( filename, 1 ); 读取彩色图
if (pSrcImg == NULL)   
{   
cout <<"Fail to load image"<<endl;   
return -1;   
}   

pRolloverlnImg = cvCloneImage(pSrcImg);     
pRoverselnImg  = cvCloneImage(pSrcImg);


if ((pRolloverlnImg == NULL)&&(pRoverselnImg == NULL))   
{   
cout<<"Fail to clone the image"<<endl;   
return -1;   
}   
    
//-------------------------------------图像翻转处理-------------------------------


cvFlip(pRolloverlnImg, NULL,0);    //载入图像绕x轴上下翻转


//--------------------------------------图像反转处理------------------------------
int length,width,step,channel;
uchar *data;
int i,j,k;

length=pRoverselnImg->height;
width=pRoverselnImg->width;
step=pRoverselnImg->widthStep;
channel=pRoverselnImg->nChannels;
data=(uchar *)pRoverselnImg->imageData;

for (i=0;i<length;i++)
{
for (j=0;j<width;j++)
{
for (k=0;k<channel;k++)
{
data[i*step+j*channel+k]=255-data[i*step+j*channel+k];
}
}
}
//*****************************************************************************************


//cvNamedWindow("src",0);      //0表示以固定的窗口尺寸显示图像,不输入任何值默认和原图大小一样
cvNamedWindow(     "src"     );
cvNamedWindow(  "Xturnover"  );
    cvNamedWindow(  "Picreverse" );

cvShowImage("src", pSrcImg);   
cvShowImage("Xturnover", pRolloverlnImg);   
cvShowImage("Picreverse",pRoverselnImg );

cvWaitKey(0);   

cvReleaseImage(&pSrcImg);   
cvReleaseImage(&pRolloverlnImg);
cvReleaseImage(&pRoverselnImg);

cvDestroyWindow("src");   
cvDestroyWindow("Xturnover");  
cvDestroyWindow("Picreverse");
return 0;   
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Digital2Slave

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

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

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

打赏作者

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

抵扣说明:

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

余额充值