您的位置:首页 > 运维架构

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

2016-09-01 11:50 399 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ opencv C