#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
int i,j,k;
//载入图像
IplImage * img=cvLoadImage(argv[1],1);
CvScalar s;
int height = img->height;
int width = img->width;
int channel = img->nChannels;
printf("the image is %d X %d wiht %d channels",height,width,channel);
for(i=0;i<height;i++)
for(j=0;j<width;j++)
{
s=cvGet2D(img,i,j); // get the (i,j) pixel value
for(k=0;k<channel;k++)
s.val[k]=255-s.val[k];
cvSet2D(img,i,j,s); // set the (i,j) pixel value
}
cvNamedWindow( "girl", CV_WINDOW_AUTOSIZE);//创建窗口
cvShowImage( "girl", img );//显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &img); //释放图像
return -1;
}
方法二:
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
int height ,width ,step ,channels ;
int i,j,k;
uchar*data ;
//char *filename="result.bmp";
IplImage* Img; //声明IplImage指针
//载入图像
Img = cvLoadImage( argv[1],1);
height = Img->height;
width = Img->width;
step = Img->widthStep/sizeof(uchar);
channels = Img->nChannels;
data = (uchar*)Img->imageData;
printf("Processing a %d X %d image with %d channels/n",height,width,channels);
// 反色图像
for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
data[i*step+j*channels+k]=255-data[i*step+j*channels+k];//反色
cvNamedWindow( "Image", 1 ); //创建窗口
cvShowImage( "Image", Img ); //显示图像
cvWaitKey(0); //等待按键
cvSaveImage("filename.jpg",Img);
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &Img ); //释放图像
return 0;
}