OpenCV学习笔记-彩色图像取反

来源:互联网 发布:国际通用聊天软件 编辑:程序博客网 时间:2024/05/18 01:31

OpenCV 图像取反:将图像变为原来图像的反色。例如,如果一副灰度图像的每个像素值由2^8=256个,假设点(i,j)出像素值为 a,则取反后的像素值为 255-a。

取反公式:

inv(i,j)=L-1-a(i,j)    //L表示图像的灰度级

以下是利用OpenCV将彩色图像取反并保存的源代码:


#include <highgui.h>  #include <core/core.hpp>  #include <cv.h>  #include <iostream>      using namespace std;      int main()  {      IplImage *img=0,*outImage=0;      int height,width,step,channels;      uchar *data;          img=cvLoadImage("D:\\robot\\Picture_set1\\机器人图片.png");   //由图像路径获得图像,可以修改      if (!img)      {          cout<<"Could not load image file: "<<endl;          exit(0);      }      /*获取图像相关信息*/      height=img->height;      width=img->width;      step=img->widthStep;      channels=img->nChannels;      data=(uchar*)img->imageData;      outImage =cvCreateImage(cvSize(width,height),img->depth,channels);        cout<<"Processing a "<<height<<"*"<<width<<" image with "<<channels<<"channels"<<endl;          const char winName1[]="inputImage";      const char winName2[]="outputImage";      cvNamedWindow(winName1,CV_WINDOW_AUTOSIZE);      cvMoveWindow(winName1,100,100);      cvNamedWindow(winName2,CV_WINDOW_AUTOSIZE);      cvMoveWindow(winName2,400,400);          cvShowImage(winName1,img);      for (int i=0;i<height;++i)      {          for (int j=0;j<width;++j)          {              for (int k=0;k<channels;++k)              {                  data[i*step + j*channels + k]=255-data[i*step + j*channels + k];  //每个通道每个像素取反              }          }      }      outImage=cvCloneImage(img);      cvShowImage(winName2,outImage);      if (!cvSaveImage("myself.jpg",outImage))   //保存图像      {          cerr<<"Save image failed!"<<endl;      }      cvWaitKey(0);      cvReleaseImage(&outImage);      cvReleaseImage(&img);      return 0;  }  

0 0
原创粉丝点击