您现在的位置:首页 > >

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
#include
#include
#include
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"<return -1;
}

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


if ((pRolloverlnImg == NULL)&&(pRoverselnImg == NULL))
{
cout<<"Fail to clone the image"<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{
for (j=0;j{
for (k=0;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;
}





热文推荐
猜你喜欢
友情链接: