OpenCV学习笔记(二):彩色图像取反

来源:互联网 发布:易语言球球大作战源码 编辑:程序博客网 时间:2024/05/19 03:44

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 1
原创粉丝点击