数组图像处理笔记——代码层:彩图转灰色

只适用于分辨率的长宽皆为4的倍数的jpg图像

所需知识:C语言


原图,仅学习用,如有侵权,请联系我,马上删除


处理后

bmp格式

先右键将图片转为bmp格式。

仅对长宽皆为4的倍数的jpg图像成立)bmp格式下,前54字节为一些杂七杂八的头信息,我们需要用的图片数据本身在这54字节后。

众所周知图片由像素构成,每个像素又由RGB三层叠加而成,总之,只要知道R、G、B一个有一个字节大,所以,一个像素3个字节。故,图像信息大小=长*宽*3

要将彩色的像素变为灰色,只需:把一个像素里的RGB三个字节上的数据都改成RGB的均值——(R+B+G)/3,即可。(注意:RGB范围0-255,需要使用unsigned char而不是char

C语言文件读写

复习文件读写:文件指针打开文件-读取文件-文件指针复位到开头-写文件。

使用二进制文件读写函数fread, fwrite

:二进制文件没有行的区别(即全在一行)

#include <stdio.h>

#define HEAD 54// 头部长度
#define WIDTH 960
#define HEIGHT 600

unsigned char buf[HEAD+WIDTH*HEIGHT*3+5];

int main() {
    FILE* fp= fopen("..\\dog.bmp","rb+");
    fread(buf,1,HEAD+WIDTH*HEIGHT*3,fp);
    for (int i = HEAD; i < HEAD + WIDTH * HEIGHT * 3; i+=3) {
        buf[i]=buf[i+1]=buf[i+2]=(buf[i]+buf[i+1]+buf[i+2])/3;
    }
    rewind(fp);// 文件指针复位文件开头
    fwrite(buf,1,HEAD+WIDTH*HEIGHT*3,fp);
    fclose(fp);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值