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

2 篇文章 1 订阅
2 篇文章 0 订阅

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

实现原理

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];

在这里插入图片描述

读取图片:
在这里插入图片描述
(111.bmp)

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

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

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

 for(j=height/2;j<height;j++)//像素排列为从下到上,从左到右
{
	fread(pix, 1, stride, fpbmp);
	for(i=0;i<width/2;i++)//将图片的上1/4的像素点改为红色
	{
		r[height-1-j][i]=255;
		g[height-1-j][i]=0;
		b[height-1-j][i]=0;
	}
}

效果图片:在这里插入图片描述
(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;

效果图片:
在这里插入图片描述

(111gray.bmp)

代码实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值