最近一段时间我学习了计算机图像处理这门课程,通过这门课程的学习,我了解到了图片具有灰度和彩色的区别,并且通过具体的代码可以将一些图片数据进行读写与转化。

第一部分:BMP图像的读写
1.BMP图像的读:
(1)首先定义BMP文件头和信息头变量BITMAPFILEHEADER bf; //BMP文件头结构体BITMAPINFOHEADER bi; //BMP信息头结构体

(2)创建文件输入流 fp
fp=fopen(fileName,“rb”); //fileName为BMP图像文件名

(3)读取信息头、文件头fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);

注:经过这两条程序把BMP图像的信息头、文件头赋给bf和bi变量,可以根据bf和bi得到图像的各种属性。

(4) 读取BMP调色板fread(ipRGB2,sizeof(RGBQUAD),256,fp);

(5)读取BMP位图数据定义一个二维数Imgdata来存取BMP位图数据。
unsigned char * * Imgdata;
Imgdata=new unsigned char*[bi.biHeight]; //声明一个指针数组
for ( i=0;i<bi.biHeight;i++)
Imgdata[i]=new unsigned char[(bi.biWidth3+3)/44]; //每个数组元素也是一个指针数组
for ( i=0;i<bi.biHeight;i++ )
for(j=0;j<(bi.biWidth3+3)/44;j++)
fread(&Imgdata[i][j],1,1,fp);//每次只读取一个字节,存入数组

2.BMP图像的写:
(1)创建一个输出流fp fp=fopen(“mybmp.bmp”,“wb”);

(2) 写BMP图像的信息头、文件头fwrite(&bf2,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bi2,sizeof(BITMAPINFOHEADER),1,fp);

(3) 写BMP调色板fwrite(ipRGB2,sizeof(RGBQUAD),256,fp);

(4) 写BMP图像的位图数据部分
for (i=(bi.biHeight)-1 ;i>=0;i–)
for (j=0 ;j<(bi.biWidth3+3)/44;j++)
fwrite(&Imgdata[i][j],1,1,fp);

注意:将图片信息导入到文件里(导入的图像数据与实际图像数据上下顺序颠倒,最后一行数据应该放在第一行,以此类推)

第二部分:主程序部分,利用上述函数,即可实现BMP图的存储与处理
#include “hxlbmpfile.h”
void ImageProcessing(HXLBMPFILE* bmp) {
int i = 0, j = 0;
HXLBMPFILE bf;
bf.iImagew = bmp->iImagew;
bf.iImageh = bmp->iImageh;
bf.iYRGBnum = bmp->iYRGBnum;
if (!bf.IspImageDataOk()) return;
for (i = 0; i < bf.iImageh; i++)
for (j = 0; j < bf.iImagew; j++)
{
bf.pDataAt(i)[j] = 255 - bmp->pDataAt(i)[j];
}
bf.SaveBMPFile(“2.bmp”);
}

int main(int argc, char* argv[]) {
HXLBMPFILE bmpfile;
if(!bmpfile.LoadBMPFile(“C:\Users\lenovo\Downloads\b8color.bmp”))
{printf(“Load BMP file failed.”);return 1;}// do other processing with the imagedata
ImageProcessing(&bmpfile);
printf(“program ends!\n”);
return 0;
}
函数大体可以不发生改变,只需要改变能够决定图片处理色度部分的具体函数就可以进行灰度图片与彩色图片之间的转化。

BMP图像的读写处理相关推荐

  1. 数字图像处理大作业-BMP文件的读写

    数字图像处理-BMP文件的读写 一.题目背景 二.灰度BMP的读写 1.读入lena.bmp文件 1.1 编写打印文件头信息与信息头数据的函数 2 通过文件内容得到灰度bmp数据信息 2.1 打印信息 ...

  2. 2、OpenCV图像的读写操作

    OpenCV图像的读写操作 概要 图像由像素组成. 像素可以被认为是非常小的正方形结构,当连接在一起时会生成图像. 它们是任何图像的最小组成部分. 如果您仔细查看前面的图像,您将能够在图像中看到一些正 ...

  3. Linux系统下,对两幅bmp图像进行左右拼接,合成一个bmp图

    一直用CSDN,觉得这个平台很不错,绝大多数信息都是正确的,一直也想有把自己解决的问题和大家分享,第一次写文章,嘿嘿.希望能帮到有用的人. 本文由完整源码,*************详细注释***** ...

  4. 【STM32调试(三)】采集bmp图像保存在SD卡

    将图像保存在SD卡 一.思路 二.移植文件系统 三.保存图片 四.实验结果 一.思路 这里保存的是BMP图像,需要先连接bmp图像的数据格式.在STM32上采集的数据格式是RGB565方便在LCD上显 ...

  5. C语言实现bmp图像对比度扩展

    假设有一幅图,由于成象时光照不足,使得整幅图偏暗(例如,灰度范围从0到63):或者成象时光照过强,使得整幅图偏亮(例如,灰度范围从200到255),我们称这些情况为低对比度,即灰度都挤在一起,没有拉开 ...

  6. C语言实现bmp图像锐化

    锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high pass filter).锐化处理在增强图象边缘的同时增加了图象的噪声. 常用的锐化模 ...

  7. C语言实现将彩色bmp图像转化为灰图、灰度图像反色

    彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;unsigne ...

  8. C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放)

    C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放) 移动 旋转 镜像 转置 缩放 自定义结构及函数如下: #define pi 3.1415926 typedef struct {unsig ...

  9. C语言读取bmp图像并做简单显示

    C语言读取bmp图像并做简单显示) bmp文件格式 读取bmp文件信息并展示 bmp文件格式 bmp文件大体上分为四个部分: bmp文件构成 位图文件头BITMAPFILEHEADER 位图信息头BI ...

最新文章

  1. 韩春雨,时隔六年再发高分论文
  2. IBM为世博会服务支持建立快速反应通道
  3. 关于PID的如何修改的FAQ
  4. leetcode 67. 二进制求和(C语言)
  5. std::map用法
  6. (ICIP2019)图像语义分割(23) LEDNet-用于实时语义分割的轻量级编解码网络
  7. linux zip压缩比1000,linux下压缩工具总结与使用(参考私房菜)
  8. 常用中国姓氏日文平假名对照表
  9. c语言如何做一个打卡的程序,C语言实现学生打卡系统
  10. jmeter接口测试
  11. 5个免费商用音频素材网站
  12. Learning Sites
  13. 2020年度CSDN博客之星评选——【Mr.郑先生_】感谢各位朋友的支持与陪伴!
  14. 【HTML】图片标签(img)
  15. proftpd的一些简单配置
  16. python中doc转docx
  17. [mit6.1810] Lab system calls
  18. js 操作在当前日期加减(天、周、月、年数)
  19. 消除代码中的 if-else/switch-case的正确姿势
  20. springboot安全之整合spring security

热门文章

  1. 学生免费申请idea时收不到确认邮件已解决
  2. 计算机网络与无线通信系统学习10:码分多址(CDMA)的本质-正交之美
  3. 5分钟解决阿里云oss对象存储
  4. 论文阅读——Towards Adversarial Retinal Image Synthesis
  5. python画卡通_Python动画底纹matplotlib
  6. rsync的限速专题
  7. word一行没写完就换行
  8. Zstack救急实战记录
  9. 【Python3零基础入门笔记】05 Python时间处理——time库的使用
  10. WRF进阶:WRF中Noah-MP地面方案中雪反照率的计算