C语言图像处理:bmp格式读图 1/4改变颜色

C语言图像处理:bmp格式读图 1/4改变颜色

目录

  • 实现原理
    • 1、图片读取
    • 2、1/4处改变颜色(红色)
    • 3、RGB转灰度图
  • 代码实现

实现原理

1、图片读取

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:
1.bmp文件头:提供文件的格式、大小等信息

#define BITMAPFILEHEADERLENGTH 14 // 24bit文件头长度为14

2.位图信息头:提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

#define BM 19778     // BM的ASCII码为19778,BM为位图的标识符
long width ;          // 宽的像素值
long height ;         // 高的像素值

3.调色板:(可选)如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表

4.位图数据:即图像数据,将三通道的颜色分别存入三个数组。

unsigned char r[2000][2000];
unsigned char g[2000][2000];
unsigned char b[2000][2000];

C语言图像处理:bmp格式读图 1/4改变颜色_第1张图片

读取图片:
C语言图像处理:bmp格式读图 1/4改变颜色_第2张图片
(111.bmp)

2、1/4处改变颜色(红色)

1/4处改变颜色(红色)
实验选用图片尺寸:434*499
色彩空间:RGB
Alpha通道:否

将图像尺寸存储到两个变量中long width ; 和long height ;中,根据要求,将尺寸分别除以2。即可以达到1/4的效果。并用遍历所有像素点,将三个通道中除了红色外其他颜色全部置0。

 for(j=height/2;j

效果图片:C语言图像处理:bmp格式读图 1/4改变颜色_第3张图片
(111part.bmp)

3、RGB转灰度图

根据人眼对红绿蓝三色的敏感程度,有一个著名的心理学公式,可以使用以下方式进行转换:

     			Gray = R*0.299+G*0.587+B*0.114

这也是最常用的一种转换,另外还有一种常用的转换叫平均值法,即取去红绿蓝三色的平均值为灰度:

     			Gray=(R+G+B)/3;

根据这个公式,依次读取每个像素点的R,G,B值,进行计算灰度值(转换为整型数),将灰度值赋值给一个新的数组,将其写入新图像的对应位置,同理所有像素点遍历一遍后完成转换。
最重要的一点就是区别灰度与灰像的概念,灰度是单通道的,灰像虽然和灰度看上去并无区别,但是仍然是三通道。文件大小会有明显区别。转换的时候需要修改对应头文件

bi2.biBitCount = 8;

效果图片:
C语言图像处理:bmp格式读图 1/4改变颜色_第4张图片

(111gray.bmp)

代码实现

具体代码实现参考我的资源
https://download.csdn.net/download/CharlieYYang/13460170实现例程及完整代码

你可能感兴趣的:(图像处理,C语言,技术,图像处理,c语言,bmp)