C语言梯度锐化编程,C语言绘制图像梯度图

原理:

8624bfe9d3f9

公式.png

1.添加头文件, 并定义相关宏和结构体

#include

#include

#include

#include

#include

#define JpegStdError jpeg_std_error

#define JpegCreateDecompress jpeg_create_decompress

#define JpegCreateCompress jpeg_create_compress

#define JpegStdioSrc jpeg_stdio_src

#define JpegReadHeader jpeg_read_header

#define JpegStartDecompress jpeg_start_decompress

#define ScanLine output_scanline

#define NextLine next_scanline

#define JpegReadLine jpeg_read_scanlines

#define JpegFinishDecompress jpeg_finish_decompress

#define JpegDestroyDecompress jpeg_destroy_decompress

#define JpegStdioDest jpeg_stdio_dest

#define JpegSetDefault jpeg_set_defaults

#define JpegSetQuality jpeg_set_quality

#define JpegStartCompress jpeg_start_compress

#define JpegWriteLine jpeg_write_scanlines

#define JpegFinishCompress jpeg_finish_compress

#define JpegDestroyCompress jpeg_destroy_compress

typedef JSAMPARRAY JpegArray;

typedef FILE *FilePtr;

typedef struct jpeg_compress_struct JpegComp;

typedef struct jpeg_decompress_struct JpegDecomp;

typedef struct jpeg_error_mgr JpegErrMgr;

typedef struct ImagePicData ImagePicData;

typedef struct ImageRGBAColor ImageRGBAColor;

struct ImagePicData

FilePtr FPtr;

int Width;

int Height;

int BitDepth;

int Flag;

int ColType;

unsigned char *RGBA;

};

struct ImageRGBAColor

{

short r;

short g;

short b;

short a;

};

2.图像梯度算法

int GradientImage(ImagePicData *ImageData, unsigned char *ImageExData)

{

ImageRGBAColor RGBAColor;

int Height = ImageData->Height;

int Width = ImageData->Width;

int Pos = 0;

int i, j;

for(i=1; i

{

for(j=1; j

{

RGBAColor.r = sqrt(pow(ImageData->RGBA[((i-1)*Width+(j))*4+0]-ImageData->RGBA[((i)*Width+(j))*4+0], 2) + pow(ImageData->RGBA[((i)*Width+(j-1))*4+0]-ImageData->RGBA[((i)*Width+(j))*4+0], 2));

RGBAColor.g = sqrt(pow(ImageData->RGBA[((i-1)*Width+(j))*4+1]-ImageData->RGBA[((i)*Width+(j))*4+1], 2) + pow(ImageData->RGBA[((i)*Width+(j-1))*4+1]-ImageData->RGBA[((i)*Width+(j))*4+1], 2));

RGBAColor.b = sqrt(pow(ImageData->RGBA[((i-1)*Width+(j))*4+2]-ImageData->RGBA[((i)*Width+(j))*4+2], 2) + pow(ImageData->RGBA[((i)*Width+(j-1))*4+2]-ImageData->RGBA[((i)*Width+(j))*4+2], 2));

if(RGBAColor.r < 0) RGBAColor.r = 0;

else if(RGBAColor.r > 255) RGBAColor.r = 255;

if(RGBAColor.g < 0) RGBAColor.g = 0;

else if(RGBAColor.g > 255) RGBAColor.g = 255;

if(RGBAColor.b < 0) RGBAColor.b = 0;

else if(RGBAColor.b > 255) RGBAColor.b = 255;

ImageExData[((i)*Width+(j))*4+0] = RGBAColor.r;

ImageExData[((i)*Width+(j))*4+1] = RGBAColor.g;

ImageExData[((i)*Width+(j))*4+2] = RGBAColor.b;

}

}

memcpy(ImageData->RGBA, ImageExData, 4*ImageData->Width*ImageData->Height);

return 0;

}

3.读写图片

参见《C语言实现色彩平衡算法》

4.添加主函数

int main(int argc, char **argv)

{

ImagePicData PicData;

double Gamma;

char RGBAData[16*300*300];

char TmpData[16*300*300];

char JpegInputName[256];

char JpegOutputName[256];

memset(&PicData, 0x00, sizeof(PicData));

memset(TmpData, 0x00, sizeof(TmpData));

memset(JpegInputName, 0x00, sizeof(JpegInputName));

memset(JpegOutputName, 0x00, sizeof(JpegOutputName));

if(argc != 3)

{

printf("入参个数错误!\n");

return -1;

}

strncpy(JpegInputName, argv[1], 255);

strncpy(JpegOutputName, argv[2], 255);

PicData.RGBA = RGBAData;

strcpy(PicData.FName, JpegInputName);

LoadJPG(&PicData);

strcpy(PicData.FName, JpegOutputName);

GradientImage(&PicData, TmpData);

CreateJPG(&PicData);

return 0;

}

5.编译运行

$ gcc -o examle examle.c -L$HOME/local/prior/lib -ljpeg -lm

$ ./examle a.jpg b.jpg

6.运行结果

原图

8624bfe9d3f9

d.jpg

效果

8624bfe9d3f9

f.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值