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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值