图像灰度级的增加、减少,原理比较简单,对每一个像素进行操作,使之增加、减少即可。
c++代码实现:
"bmp.h"的头文件代码:bmp图片的类以及读写函数 bmp.h
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <malloc.h>
#include <cstdio>
#include "bmp.h"
using namespace std;
#define DRAW_HEIGHT 256 //目标图像高度
#define DRAW_WIDTH 256 //目标图像宽度
int main()
{
BMP rbmp;
BMP wbmp(DRAW_WIDTH,DRAW_HEIGHT);
char strFile[50] = "./lena24.bmp";//打开图像路径,BMP图像必须为24位真彩色格式
char strFilesave[50] = "./test.bmp";//处理后图像存储路径
//读取位图的数据
imread(strFile,rbmp);
int width = rbmp.cols();
int height = rbmp.rows();
int l_width = WIDTHBYTES(width*24);//计算位图的实际宽度并确保它为4byte的倍数
/*******************图像处理部分******************/
for(int hnum=0;hnum<height;hnum++)
{
for(int wnum=0;wnum<width;wnum++)
{
int pixel_point=hnum*l_width+wnum*3;//数组位置偏移量,对应于图像的各像素点RGB的起点
wbmp.pColorData[pixel_point]=rbmp.pColorData[pixel_point]*0.5;
wbmp.pColorData[pixel_point+1]=rbmp.pColorData[pixel_point+1]*0.5;
wbmp.pColorData[pixel_point+2]=rbmp.pColorData[pixel_point+2]*0.5;
}
}
/*******************图像处理部分******************/
std::cout<<"Done!"<<std::endl;
imwrite(strFilesave,wbmp);
system("pause");
return 0;
}